解决RES高, 启动参数
查看部署系统的启动脚本,发现启动方式为:Java –jar xxx.jar –Xms256m –Xmx512m
正确的Java命令:
java [ options ] class [ arguments ]
java [ options ] -jar file.jar [ arguments ]
其实也找到了此问题原因所在,Java –jar $jar_file –Xms512m –Xmx1024m被JVM解释成了程序的参数
正确命令:
java –Xms256m –Xmx512m –jar xxx.jar
至此,RES过高的问题已解决,但是VIRT的问题还在
解决VIRT高
从glibc2.11版本开始
linux为了解决多线程下内存分配竞争而引起的性能问题,增强了动态内存分配行为,使用了一种叫做arena的memory pool
在64位系统下面缺省配置是一个arena大小为64M,一个进程可以最多有cpu cores * 8个arena
假设机器是8核的,那么最多可以有8 * 8 = 64个arena,也就是会使用64 * 64 = 4096M内存
# 解决方案
export MALLOC_ARENA_MAX=8(一般建议配置程序cpu核数)
配置环境变量使其生效,再重启该jvm进程,VIRT比之前少了快1个G