Sự cố java-8-oracle (1.8.0_66) với PrintAssugging miễn phí Không thể tải hsdis-amd64.so


20

Tôi đang cố gắng chạy các chương trình của mình với -XX:+PrintAssemblycác tùy chọn nhưng tôi luôn nhận được thông báo như:

Cảnh báo máy chủ 64-bit Java HotSpot (TM): PrintAssugging được bật; bật DebugNonSafepoints để đạt được đầu ra bổ sung Không thể tải hsdis-amd64.so; thư viện không tải được; PrintAssugging bị vô hiệu hóa

Tôi đã tải xuống hsdis-amd64.so từ Kenai: https://kenai.com/projects/base-hsdis/doads

Tôi đã tự xây dựng thư viện này với dự án http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ .

Tôi đặt nó ở khắp mọi nơi "google nói":

/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/
/usr/lib/jvm/java-8-oracle/lib/amd64/

với tên:

hsdis-amd64.so
libhsdis-amd64.so
hsdis.so
libhsdis.so

Tôi đã thử thậm chí đặt thủ công xuất LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... Và tất cả chẳng vì gì cả.

Không có kết quả Google nữa không có sự kết hợp của các giải pháp trên :-(

Bất cứ ai có thể giúp tôi?

Câu trả lời:


10

Cài đặt đầu tiên libhsdis0-fcmlnhư được mô tả trong câu trả lời khác 1 :

sudo apt-get install libhsdis0-fcml

Điều này chỉ cài đặt nó cho OpenJDK. Tuy nhiên, bạn đang sử dụng java-8-oracle, vì vậy bạn sẽ cần sao chép nó ở đó. Đây là lệnh sao chép chính xác làm việc cho tôi:

sudo cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/hsdis-amd64.so /usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so

Nếu điều đó vẫn không hoạt động, bạn có thể thử stracexem bạn javađang tìm kiếm ở đâu. Tôi đã sử dụng:

strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis

để có được đầu ra như thế này:

[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY|O_CLOEXEC) = 14

Bạn có thể thấy rằng các địa điểm và tên bạn đang thử chắc chắn nằm trong số các tìm kiếm JDK (trong trường hợp của tôi, nó có thể đã tìm kiếm nhiều địa điểm hơn, nhưng đã dừng lại vì vị trí cuối cùng ở trên là nơi tìm thấy đối tượng được chia sẻ).

Lưu ý rằng bạn chắc chắn cần -fcờ stracevì JVM thực tế được khởi chạy như là một tiến trình con của javalệnh gốc .

Trong số các vấn đề stracecó thể tiết lộ là một vấn đề quyền. Tôi chỉ cần đọc perms trên thư viện cho người dùng khởi chạy java.

java -versionĐầu ra của tôi :

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

1 Thực sự, đây chỉ là một cách để có được một hsdis.sotệp (có lẽ đang hoạt động) theo cách thân thiện với người quản lý gói. Bạn luôn có thể tải xuống trực tiếp từ một trong những nguồn khác nhau.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.