按网上的指点一步步来,先要得到程序的pid,看看占用内存大小


由于程序卡着了,输入命令没有反应,所以new session,输入ps aux

应该是pid为6868的这个是我此前跑不通的程序。
jmap -heap 6868

解释:
因为新版的Linux系统加入了ptrace-scope
机制,该机制的目的是防止用户访问正在执行的进程的内存,但是如jinfo,jmap这些调试类工具本身就是利用ptrace来获取执行进程的内存等信息。
解决:root下sysctl -w kernel.yama.ptrace_scope=0

sudo vim /etc/sysctl.d/10-ptrace.conf
添加或修改以下这一句:(0:允许, 1:不允许)
kernel.yama.ptrace_scope = 0
输入:wq
,退出vim编辑器

执行echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

fsck.ext4 -y /proc/sys/kernel/yama/ptrace_scope
这个方法没有用

第二次设置参数:(没有用)
JAVA_OPTS="-server -Xms4000m -Xmx20000m -Xmn512m -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${SPACEXLOG}/"
老师给出了解决方案:
程序运行前修改的环境变量,让java内存可以用的更多一点:
export MAX_MEMORY_OVERRIDE=12800
网友评论