java tomcat 监控_JAVA企业应用【第五篇】TOMCAT监控

本文详细介绍了Tomcat的ip_hash策略,用于优化同一IP连接的分配,以及JVM诊断工具Jps、Jstack和Jmap的使用方法。Jps用于查看Java进程状态,Jstack用于分析线程栈信息,Jmap则用于输出内存中的对象详情。通过这些工具,可以有效地监控和排查Java应用的性能问题,例如分析CPU过高时的线程栈,定位问题并进行优化。
摘要由CSDN通过智能技术生成

tomcat尽量使用ip_hash规则,这样同一ip的连接会在同一台机器上。

Tomcat性能优化

Jps

Jstack

Jmap

一、Jps

用来查看基于HotSpot JVM里面所有进程的具体状态,包括进程ID,进程启动的路径等等。

与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,

并显示他们的进程号。使用jps时,不需要传递进程号做为参数。

Jps也可以显示远程系统上的JAVA进程,这需要远程服务商开启了jstat服务,以及RMI注及服务,

不过常用都是对本地的JAVA进程的查看。

命令格式:

jps [options][hostid]

常用参数说明:

-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。

-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。

-v 输出传给JVM的参数。

常用命令:

查看进程ID:jps

查看程序启动路径等:jps -lvm

二、Jstack

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如果崩溃和在程序何处发生问题。另外,jstack工具还可以附属在正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

命令格式:

$jstack[option]pid

$jstack[option]executable core

$jstack[option][server-id@]remote-hostname-or-IP

常用参数说明:

OPTIONS

-F jstack [-l] pid 无法响应时,强制打印堆栈

-l 长列表,打印关于锁的附加信息,例如属于 java.util.concurrent的ownable synchronizers列表

-m 混合模式输出(包括java和本地c/c++片段)堆栈。

pid: java应用程序的进程号,一般可以通过jps来获得;

executable:产生core dump的java可执行程序;

core:打印出的core文件;

remote-hostname-or-ip:远程debug服务器的名称或IP;

server-id:唯一id,假如一台主机上多个远程debug服务;

三、Jmap

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本 。使用方法jmap -histo pid.

如果连用SHELL jmap -histo pid>a.log 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format =b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件中,再配合MAT(内存分析工具)(Memory Analysis Tool)或与jhat(Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。

64位机上使用需要使用如下方式:

jmap -J-d64 -heap pid

命令格式:

jmap [option]pid

jmap [option]executable core

jmap [option][server-id@]remote-hostname-or-IP

参数说明

1)、options:

executable Java executable from which the core dump was produced.

(可能是产生core dump的java可执行程序)

core将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id唯一id,假如一台主机上多个远程debug服务

2)、基本参数:

-dump:[live]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=.live子选项是可选的,

假如指定live选项,那么只输出活的对象到文件。

-finalizerinfo 打印正等候回收的对象的信息

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况

-histo[:live]打印每个class的实例数目,内存占用,类全名信息。VM的内部类名字开头会加上前缀"*".如果live子参数加上后,只统计活的对象数量。

-permstat打印classload和jvm head长久层的信息.包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量。另外,内部String的数量和占用内存数也会打印出来。

-F 强迫.在pid没有相应的时候使用-dump 或者-histo参数.在这个模式下,live子参数无效.

-h|-help 打印辅助信息

-J 传递参数给jmap启动的jvm.

pid需要被打印配相信息的java进程id

企业案例:JAVA进程占用CPU过高

jps获取java进程的PID。

jstack pid >> java.txt 导出CPU占用高进程的线程栈。

top -H -p PID 查看对应进程的哪个线程占用CPU过高。

echo “obase=16; PID”|bc 将进程的PID转换为16进制。

在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。

分析负载高的线程栈都是什么业务操作。优化程序并处理问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值