首页 国际新闻正文

Tomcat是一款常用的Web容器, 它是运转在 JVM(Java Virtual Machine) 中的一个Java进程.

本文以Tomcat为例, 凭借一些JDK的东西对Tomcat在运转过程中的内存占用情况进行监控, 为优化供给数据支撑易仕顿.

1 JDK 东西的运用

JDK自带的东西坐落${JAVA_HOME}/bin/目录下.

JConsole 能够简单明了地检查到内存的运用情况, 线程的情况, 当时加载的类的总量等.

JVisualVM 会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候能够下载插件(如GC等), 从而检查更丰厚的信息. 如果是剖析本地的Tomcat的话, 还能够进行内存抽样等, 检查每个类的运用情况.

(1) jps 检查本地运转着的 Java 进程, 及其进程号、进程桅组词发动的途径等信息;

(2) jmap 检查废物搜集策徐忠碧略即 JVM 内存占用情况:

jmap -heap pid # 检查废物搜集战略, 以及堆内存的分配与运用情况.

jmap -cl奈曼一中成果查询stats pid # 检查类加载器的计算数据 —— 此指令调用了sun.jvm.hotspot.runtime.VM.initialize() 办法, 会导致该 pid 对应的 JVM 进程堵塞.

jmap -histo [pid] # 依照内存运用巨细倒序列出内存中的实例类型.

(3) jstack 检查线程栈:

jstack pid # 列出该 pid 对应 JVM 的一切线程栈描绘, 首要包含每个线程的情况以及仓库内各栈帧的办法全限定名、代码方位. 留意: 这些信息的显现仅仅为了便于开发人员阅览, 并不是栈中存的便是这些信息.

(4) jstat 实时检查堆内存的运用情况:

# 运用办法: 
jstat -
  • 运用示例: 距离5s, 每隔10条输出一次头信息, 打印进程号为3308的JVM进程的堆内存运用情况, 以及各代废物收回的次数及时刻:
  • jstat -gcuti洛然傅锦年l -h10 77545 5000
  • 显现信息如下:


  • 参数阐明:
S0: Heap上的Survivor Spac会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候e 0区已运用空间的百分比
S1: Heap上的Survivor Space 1区已运用空间的百分比
E: Heap上的Eden Space区已运用空间的百分比
O: Heap上的Old Space区已运用空间的百分比
M: Meta Space(元数据区)已运用空间的百分比
YGC: 从应用程序发动到采样谌字怎样读时发作Young GC的次数
YGCT: 从应用程序发动到采样时Young G会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候C所用的时刻(单位: 秒)
FGC: 从应用程序发动到采样时发作Full GC的次数
FGCT: 从应用程序发动到采样时Full GC所用的时刻(单位: 秒)
GCT: 从应用程序发动到采样时用于废物收回的总时刻(单位: 秒)

2 检查 GC 日志信息

能够经过装备JVM的发动参数, 打印类的加载情况及目标的收回信息, 能够打印到屏幕或指定文件中,哪个vpn好用 默许也会打印到cata日plin普闻天鼓a.log中. Tomcat容器蔡金涂的JVM发动参数装备文件是: ${TOMCAT_HOME}/bin/catalina.sh, 具体参数如下:

-verbose:gc
# 在输出设备显现废物搜集信息(JVM发作内存收回时输出相关信息)
-XX:+PrintGC
# 输出GC日志, 方式: Full GC 118250K->113543K(130112K), 0.0094143 secs
-XX:+PrintGCDetails
# 输出GC具体日志, 方式: GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs[Tenured: 112761K->10414K(12102海带打结机4K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps
# 输出GC的时刻戳, 以基准时刻的方式输出: 11.851: [徐子姗GC 98328K->93620K(130112K), 0.0082960 secs李维亚], 11.851是JVM发动后的秒数.
-XX:+PrintGCDateStamps
# 输出GC的时刻戳, 以日期的方式输出: 2018-08-28T21:53:59.234+0800
-XX:+PrintGCApplicationStoppedTime
# 打印废物收回期间程序暂停的时刻, 即GC耗费的时刻. 可与上面混合运用.
# 输出方式: Total ti会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候me for which application threads were stopped: 0.04682会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候29 seconds
-XX:+PrintGCApplicationConcu攀上女rrentTime
# 打印每次废物收回前, 程序未中止的执行时刻, 即相邻2次GC的距离.
# 能够和上面的装备混合运用. 输出方式: Application time: 0.529152卢旗英4 seconds
-XX:+PrintTenuringDistribution
# 调查各个Age的目标总巨细
-XX:PrintHeapAtGC
# 打印GC前后的具体仓库信息
-XX:+HeapDumpOnOutOfMemoryError
# 发作OOM时主动dump会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候仓库信息, 会议记录格局,经过JDK常用东西监控Java进程的内存占用情况,汕尾气候以便后续剖析
-Xloggc:../logs/gc.log
# 与上面选项合作运用, 将日志信息输出到指定的文件以便后续剖析

3 增加 JMS 长途监控

对布置在局域网内其他服务器上的Tomcat, 能够翻开JMX监控端口, 就能够在别的的服务器上经过该端口检查常用的参数(一些比较复杂的功用不支嘎玛鲁乔巴持).

装备办法: 同样是在JVM发动参数中装备, 装备如下:

-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=fals鲁兆新浪博客e
-Djava.rmi.server.hostname=172.16.11.62 # 设置JVM的JMS监听的IP地址, 避免过错监听为本机127.0.0.1地址
-Dcom.sun张婧璇.management.jmxremote.port=1090 # 设置JVM的JMS监控的端口
-Dcom.sun.management.jmxremote.ssl=false # 设置JVM的JMS监控不实用SSL
-Dc民国之战争贩子om.sun.management.jmxremote.authenticate=false # 设置JVM的JMS监控不需要认证
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。