grafana / pyroscope-java

pyroscope java integration
Apache License 2.0
75 stars 32 forks source link

pyroscope-io/async-profiler is compiled using different gcc version than jvm-profiling-tools/async-profiler #45

Closed kazuhiro closed 2 years ago

kazuhiro commented 2 years ago

It seems pyroscope-io/async-profiler has been compiled using GCC 7.5.0, but the genuine jvm-profiling-tools/async-profiler used GCC 4.4.x or 4.7.x. It is a small difference but makes pyroscope-java unusable on some distros, ie. CentOS 7 due to ABI/GLIBC incompatibility.

2022-06-21 14:57:26.059 INFO PyroscopeAgent We recommend specifying application name via env variable PYROSCOPE_APPLICATION_NAME
cze 21 14:57:26 sspauc003d1vteo scl[2507]: 2022-06-21 14:57:26.077 INFO PyroscopeAgent For now we chose the name for you and it's javaspy.UW8oRpppROea7fitb5cNVQ
cze 21 14:57:26 sspauc003d1vteo scl[2507]: 2022-06-21 14:57:26.078 WARN PyroscopeAgent PYROSCOPE_SERVER_ADDRESS is not defined, using http://localhost:4040
cze 21 14:57:26 sspauc003d1vteo scl[2507]: 2022-06-21 14:57:26.089 ERROR PyroscopeAgent Error starting profiler
cze 21 14:57:26 sspauc003d1vteo scl[2507]: java.lang.UnsatisfiedLinkError: /tmp/APPNAME-pyroscope/libasyncProfiler-linux-x64-f4c4c2b975dbda422c9dd1df21120376981478a.so: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /tmp/APPNAME-pyroscope/libasyncProfiler-linux-x64-f4c4c2b975dbda422c9dd1df21120376981478a.so)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:384)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:228)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:170)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2389)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/java.lang.Runtime.load0(Runtime.java:755)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/java.lang.System.load(System.java:1953)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at io.pyroscope.one.profiler.AsyncProfiler.getInstance(AsyncProfiler.java:45)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at io.pyroscope.javaagent.Profiler.<init>(Profiler.java:131)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at io.pyroscope.javaagent.PyroscopeAgent.premain(PyroscopeAgent.java:38)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.base/java.lang.reflect.Method.invoke(Method.java:568)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:491)
cze 21 14:57:26 sspauc003d1vteo scl[2507]: at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503)
korniltsev commented 2 years ago

Should be fixed in pyroscope v0.9.0. Recompiled on centos7 with gcc 4.8.5.