tomcat需要多少内存

原创文章,转载请指明出处并保留原文url地址

Tomcat是我们最长用的java应用服务器之一了,但当tomcat工作时到底给他分配多少内存合适?本文方法也适用普通java的进程。

 

一.Tomcat内存构成 

 

Tomcatjava程序,他在运行时是标准的jvm进程,内存分配情况如下图所示。

 

wps_clip_image-26619[2][1]

 

 

Jvm的堆内存大概分为:年轻代,年老代,持久代 三个主要部分。

 

 

其中年轻代,分为:Eden spaceFrom space To  Space 三个部分。

 

 

关于堆三个内存代不在介绍,读者去参考网络上文章,或者本站转载文章

 

 

. 查找java或者tomcat进程 

 

1. 利用jdk自带jps工具 获取java的进程信息如下:

 

wps_clip_image-15268[2][1]

 

图中, 第一列是java的进程id

 

 

2. 利用ps查找java的进程id

 

wps_clip_image-20171[2][1]

 

如上图,我们可以知道几个java进程,分别是289049562等等

 

三.查看java进程相关信息 

 

利用jdk自带的jinfo命令(这个命令只在linux存在,windows下有其他相关命令,大家自己去搜索吧)查看进程相关信息。

 

wps_clip_image-8031[2][1]

 

 

 

 

 

wps_clip_image-12858[2][1]

 

 

如上面两个图形,将系统中很多信息都已经打印出来了, 特别请关注绿色矩形区域内容。

 

是当前进程设置的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初始配置正常、系统正常工作后,经过一段工作,特别是有较大压力时,我们可以利用上面工具反复多次获取数据,然后不断修正各项参数。

 

内存设置太多利用不上也没有意义,太少不够使用也不行,但是这个配置是一个过程。需要在实践中多利用工具不断调整,最后长时间优化后就稳定下来了。

发表评论