作者:陈陈 | 来源:互联网 | 2023-09-11 21:45
2.关于execstack,需要首先sudoapt-getinstallexecstack进行安装:自己利用jni方式编译成的libxxx.so原本都是-usrli
问题总结:
堆栈太小,64位计算机的堆栈大小默认大于32位,如果将程序从64放入32运行,将出现错误,需要更改初始堆栈大小
(.so库提供了两个函数接口。 一个使用较大的图像,另一个处理较小的图像。 仅在调用上一个函数时溢出)
调用了以前在hadoop程序中使用jni用c语言编写的(libxxx.so )本地库(在第一台计算机上运行正常,但在另一台) 32位Ubuntu ) )并将其复制到群集
执行时发生错误:
anirrecoverablestackoverflowhasoccurred。
pleasecheckifanyofyourloaded.sofileshasenabledexecutablestack (seemanpageexecstack (8) )。
# afatalerrorhasbeendetectedbythejavaruntimeenvironment :
#JREversion:Java(TM ) seruntimeenvironment (7.0 _ 71-b14 )、build 1.7.0_71-b14 ) () ) ) )。
#JavaVM:Javahotspot(TM ) server VM (24.71-b01混合建模Linux-x86 ) ) ) ) ) ) ) ) )
# failedtowritecoredump.coredumpshavebeendisabled.toenablecoredumping,try ' ulimit-c unlimited ' beforestartingjavagagaing
eclipse指出的错误主要有三点:
libxxx.so库堆栈溢出
要在linux上使用execstack设置libxxx.so,必须运行堆栈
core dump被禁止,建议使用ulimit -c unlimited
首先,我想您是不是没有向. so文件添加执行权限。
于是我发现虽然是sudo chmod a x,但还是不行。
因此,根据错误信息,我从后向前在网上搜索了几种解决方法:
1.ulimit 33603358 www.cn blogs.com/leaven/archive/2011/04/22/2024539.html,ulimit -c unlimited设置完成后,有何作用
对于execstack,必须首先安装sudo apt-get install execstack。
自己利用jni方式编译的libxxx.so本来都是
- /usr/lib/libTest.so
由于发现文件中没有设置执行堆栈,因此execstack -s /usr/lib/libTest.so
但是没有效果,程序仍然是错误的。
3 .最后,重点是设置分配给java VM虚拟机的堆栈大小。
我看了几个关于虚拟机参数设置的页面:
使用第一种方法。 无法执行java -Xss512K命令。 因此,按照第三种方法,直接在eclipse的运行时配置s中设置虚拟机参数。
好了!