启动报错:
threw exception; nested exception is java.lang.UnsatisfiedLinkError: /tmp/librocksdbjni5415780267701769402.so: /tmp/librocksdbjni5415780267701769402.so: failed to map segment from shared object
发生这种错误多半是国产操作系统环境下启动nacos出现的错误,网上都是什么nacos未适配arm处理器,或者是/tmp目录挂载问题,其实根本就不是这个原因。
真实原因和解决方案:
原因:naocs会通过JNI技术调用rocksdb的库文件,首先从系统库文件目录java.library.path查找rocksdbjni.so文件,如果找不到再查找rocksdbjni-linux-平台.so文件,再找不到会从jar中将指定so文件复制到临时目录(通过ROCKSDB_SHAREDLIB_DIR指定,未指定则File.createTempFile),再去加载该文件,但是安全版操作系统无法执行
设置java.library.path的两种方式:
1、通过启动参数设定 java -Djava.library.path=/jni/library/path Test
2、JVM启动时,会使用系统变量LD_LIBRARY_PATH的值来初始化java.library.path属性
以上逻辑来自以下源码:
rocksdbjni-xxx.jar中Rock