jvm.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package ebpftracer
  2. import (
  3. "fmt"
  4. "github.com/coroot/coroot-node-agent/utils"
  5. "github.com/cilium/ebpf/link"
  6. )
  7. const (
  8. // goServeHTTP = "net/http.serverHandler.ServeHTTP"
  9. binPath = "/opt/github/jdk8u/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/libnio.so"
  10. symbolsocketRead0 = "Java_sun_nio_ch_FileDispatcherImpl_read0"
  11. )
  12. func (t *Tracer) AttachJavaNioReadUprobes(pid uint32, insID utils.ID) []link.Link {
  13. if t.disableL7Tracing {
  14. return nil
  15. }
  16. var links []link.Link
  17. ex, err := link.OpenExecutable(binPath)
  18. if err != nil {
  19. return nil
  20. }
  21. opt := link.UprobeOptions{
  22. Offset: 103,
  23. //PID: int(pid),
  24. }
  25. upread02, err := ex.Uprobe(symbolsocketRead0, t.uprobes["uprobe_Java_sun_nio_ch_FileDispatcherImpl_read0"], &opt)
  26. if err != nil {
  27. return nil
  28. }
  29. links = append(links, upread02)
  30. if len(links) == 0 {
  31. return nil
  32. }
  33. fmt.Println("jvm uprobes attached")
  34. return links
  35. }
  36. func (t *Tracer) AttachJavaNetReadUprobes(pid uint32, insID utils.ID) []link.Link {
  37. if t.disableL7Tracing {
  38. return nil
  39. }
  40. //
  41. //if pid != 251719 {
  42. // return nil
  43. //}
  44. var libnetSo = "/opt/github/jdk8u/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/libnet.so"
  45. var sys = "Java_java_net_SocketOutputStream_socketWrite0"
  46. var links []link.Link
  47. ex, err := link.OpenExecutable(libnetSo)
  48. if err != nil {
  49. return nil
  50. }
  51. opt := link.UprobeOptions{
  52. Offset: 66,
  53. PID: int(pid),
  54. }
  55. upread02, err := ex.Uprobe(sys, t.uprobes["uprobe_Java_java_net_SocketOutputStream_socketWrite0"], &opt)
  56. if err != nil {
  57. return nil
  58. }
  59. links = append(links, upread02)
  60. if len(links) == 0 {
  61. return nil
  62. }
  63. fmt.Println("jvm client uprobes attached", pid)
  64. return links
  65. }