- 使用 chroot 後執行 java 出現函式找不到的訊息。
java: error while loading shared libraries: libjli.so:
cannot open shared object file: No such file or directory
- 將 java 執行連結到 jvm 目錄中的 java 執行檔。
[root@dywang script]# cd usr/bin
[root@dywang bin]# ln -sf ../../usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java java
- 將 chroot 中 proc 目錄連結到 /proc。
[root@dywang script]# mount -o bind /proc proc
- 將 chroot 中 dev 目錄連結到 /dev。
[root@dywang script]# mount -o bind /dev dev
- 執行的 java class 不在目前目錄中,出現以下錯誤訊息。
[root@dywang script]# sudo chroot /var/www/moodledata23/script \
java program/A/R/AR program/A/R/R.txt 2
Exception in thread "main" java.lang.NoClassDefFoundError:
program/A/R/AR (wrong name: AR)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
- 執行的 java class 不在目前目錄中,不可以直接以路徑指到 class,而是要下 -cp 參數,指定 class 所在目錄。
[root@dywang script]# sudo chroot /var/www/moodledata23/script java \
-cp program/A/R AR program/A/R/R.txt 2
17+...+43=810
- 執行的 java 程式,出現以下錯誤訊息。
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f75fd000000,
2555904, 1) failed; error='Permission denied' (errno=13)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 2555904 bytes
for committing reserved memory.
# An error report file with more information is saved as:
- 檢查原因為 SELinux 阻擋,使用自訂 SELinux 策略方式解決。1.6