Tomcat是我们最长用的java应用服务器之一了,但当tomcat工作时到底给他分配多少内存合适?本文方法也适用普通java的进程。
一.Tomcat内存构成
Tomcat是java程序,他在运行时是标准的jvm进程,内存分配情况如下图所示。
Jvm的堆内存大概分为:年轻代,年老代,持久代 三个主要部分。
其中年轻代,分为:Eden space, From space , To Space 三个部分。
关于堆三个内存代不在介绍,读者去参考网络上文章,或者本站转载文章
二. 查找java或者tomcat进程
1. 利用jdk自带jps工具 获取java的进程信息如下:
图中, 第一列是java的进程id。
2. 利用ps查找java的进程id
如上图,我们可以知道几个java进程,分别是28904,9562等等
三.查看java进程相关信息
利用jdk自带的jinfo命令(这个命令只在linux存在,windows下有其他相关命令,大家自己去搜索吧)查看进程相关信息。
如上面两个图形,将系统中很多信息都已经打印出来了, 特别请关注绿色矩形区域内容。
是当前进程设置的java内存设置。
四.获取当前java进程内存信息
通过jdk自带的jmap命令获取特定java进程实际内存信息如下:
[root@localhost ~]# jmap -heap 28904
Attaching to process ID 28904, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b23
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 1048576 (1.0MB)
MaxNewSize = 536870912 (512.0MB)
OldSize = 4194304 (4.0MB)
NewRatio = 8
SurvivorRatio = 8
PermSize = 536870912 (512.0MB)
MaxPermSize = 1073741824 (1024.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 52428800 (50.0MB)
used = 5448320 (5.1959228515625MB) ①
free = 46980480 (44.8040771484375MB)
10.391845703125% used
From Space:
capacity = 3670016 (3.5MB)
used = 1237008 (1.1797027587890625MB) ②
free = 2433008 (2.3202972412109375MB)
33.70579310825893% used
To Space:
capacity = 3538944 (3.375MB)
used = 0 (0.0MB) ③
free = 3538944 (3.375MB)
0.0% used
PS Old Generation
capacity = 477233152 (455.125MB)
used = 211800592 (201.98878479003906MB) ④
free = 265432560 (253.13621520996094MB)
44.380946946451864% used
PS Perm Generation
capacity = 536870912 (512.0MB)
used = 21306024 (20.319007873535156MB) ⑤
free = 515564888 (491.68099212646484MB)
3.968556225299835% used
[root@localhost ~]#
请注意上面蓝色字体部分数据,是实际被测量进程的实际对内存使用情况
五.调整tomcat内存配置信息
1. 常用内存选项
-Xms 启动应用时,JVM堆空间的初始大小值。
-Xmx 应用运行中,JVM堆空间的极限值。
-XX:PermSize 应用服务器启动时,永久存储区的初始内存大
-XX:MaxPermSize 应用运行中,永久存储区的极限值
-XX:NewSize=n:设置年轻代大小
-XX:MaxNewSize=n:设置年轻代最大的大小
2. 设置tomcat今天内存尺寸
根据上面 ①+②+③ 是新生代实际大小
④ 年老带实际大小
⑤是持久代实际大小
①+②+③ < -XX:MaxNewSize
①+②+③+④ <= -Xms <= -Xmx
⑤ <= -XX:PermSize <= -XX:MaxPermSize
根据这个我们可以配置我们的相关设置。在第一次配置tomcat的配置时,建议给每个设置都预留比较大的 余量,充分保证系统的正常运行。
例如如下的一个配置
-Xms128m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
3. Tomcat内存优化
在tomcat初始配置正常、系统正常工作后,经过一段工作,特别是有较大压力时,我们可以利用上面工具反复多次获取数据,然后不断修正各项参数。
内存设置太多利用不上也没有意义,太少不够使用也不行,但是这个配置是一个过程。需要在实践中多利用工具不断调整,最后长时间优化后就稳定下来了。