说在前面:
1.为什么要jvm调优
前面有篇文件已经说明了java的内存模型:
java应用------>依赖jvm---->依赖OS(操作系统)
所以应用直接打交道的是jvm,要想应用跑的稳健(系统异常少,比如内存溢出之类的),快速(响应速度快,因为gc的时候应用的所有线程都停止工作,影响速度)
上面的这两个目标都需要调节jvm来解决:
2.jvm调优的重点:
a. 垃圾回收+
b. 内存管理
3.要对哪些地方调优:
局部变量(方法内部的变量)存在栈stack里面,
成员变量(类所属于的变量)存在堆heap里面
一张图让大家明白jvm内存结构
4.对于每个参数调多少?
经验+工具:
经验上图中已经给出一部分:
-Xms:heap最小尺寸
-Xmx::heap最大尺寸
这两者最要配置一样的大小
-Xmn:young区的尺寸:应该为上面两者的1/3;
下面看工具:
要调整他们首先要观察JVM内存和gc,观察的工具很多,jdk本事提供了一些,这些工具简单实用,而且不需要安装。
最长用的工具
jps【查看JVM的进程id】+
jstat【查看内容和gc状态】
Jstat的例子::
jstat -gcutil 21308 250 10
其中,21308是(运行jboss)的JVM的pid;250是采样间隔,单位是毫秒,即250毫秒采集一次数据;10是采样次数。
通过观察采集次数,就可以看到内存和gc的变化了。
观察结论:内存各个区域占用率不高,gc时间也不长,不过,perm使用率比较低【13.57为百分比】(所以分配的有点大了,太浪费了)。因为perm区的对象与JVM的生命周期是一样的,对象数量不会动态变化,所以,我们可以把这个区域的尺寸设置为原尺寸的二分之一(减小perm区的大小),这样,perm的占用率将从13%左右增加到26%左右。
5.去哪里调参数
对eclipse进行JVM配置
对tomcat进行JVM配置