一、JVM参数
- -Xms,是指程序启动是占用的内存大小,初始分配堆内存,一般来说可以相对大些,启动会快点
- -Xmx,是指程序运行期间最大可用的内存大小,按需分配,如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常
- -Xss,是指每个线程的堆栈大小(太小的话可能发生栈溢出,没个java方法在执行都会创建栈帧)
- -XX:PermSize,初始分配的非堆内存
- -XX:MaxPermSize,最大分配的非堆内存,即持久代空间
二、jvm调优工具
- 一、jps:虚拟机进程状况工具
- 二、jstat:虚拟机统计信息监视工具
- 三、jmap:Java内存印象工具
- 四、jhat:虚拟机堆转储快照分析工具
- 五、jstack:Java堆栈跟踪工具
- 六、jinfo:Java配置信息工具
三、常见问题
1)用jmap分析堆内存使用情况
- 内存溢出问题,可以用jmap下一个dump包(jmap -dump:file=fileName Pid),然后用jvisualvm工具来打开,分析对应实例创建情况(可以通过不同时期的dump包进行对比来观察差异)
2)用Jconsole观察jvm整体情况(包括堆外内存使用情况)
通常我们都需要再window机器上远程到linux服务端来看jvm情况,因为linux不支持图形化界面。配置步骤如下:
-
java应用程序启动的时候加上以下参数:
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=1000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -
修改jmxremote.access和jmxremote.password.template
vi jmxremote.access,添加两个用户,如下:
#monitorRole readonly
lisssss readonly
#controlRole readwrite \
admin readwrite \
create javax.management.monitor.*,javax.management.timer.* \
unregister
mv jmxremote.password.template jmxremote.password #重命名
chmod +w jmxremote.password #增加写权限
vim jmxremote.password 为只读用户和读写用户设置密码,如下:
# monitorRole QED
lisssss 1234xx
# controlRole R&D
admin 1234xx
- 打开本地Jconsole,远程连接即可。