Java项目相关监控与调优

Linux  JVM Tomcat

=========Linux ===============

监控 nmon  命令:nmon -s 10 -c 60 -f -m /home

-s 10 每10s收集一次

-c 60 一共收集60次

-f 保存带时间的文件名

-m 保存目录

=========JVM ====================

监控 jps jstack jstat

jps在linux系统获得java应用进程号  命令:jps -m -l

-------------------------------------

jstat获得gc 内存分配情况 命令:jstat -gcutil pid 3000 6

3000 每3秒收集一次

6 收集6次

JVM配置:

在哪里设置,分好几种情况:
1、集成开发环境下启动并使用JVM,如eclipse需要修改根目录文件eclipse.ini;
2、Windows服务器下安装版Tomcat,可使用Tomcat7w.exe工具(tomcat目录下)和直接修改注册表两种方式修改Jvm参数;
3、Windows服务器解压版Tomcat注册Windows服务,方法同上;
4、解压版本的Tomcat, 通过startup.bat启动tomcat加载配置的,在tomcat 的bin 下catalina.bat 文件内添加;
5、Linux服务器Tomcat设置JVM,修改TOMCAT_HOME/bin/catalina.sh;
不同的中间件服务器有不同的配置方式,tomcat、jboss、weblogic、websphere等各不相同,tomcat的上面已经说了,jboss的在run.sh中设置,weblogic在setDomainEnv.sh中设置,websphere在jvm.options中设置
典型JVM参数设置: 
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。

 ------------------------------------------------

-----------------------jmap------dump java内存堆-----------------------

jps -m -l查找java进程pid

------------

查找此进程的端口号
netstat -nap | grep pid

netstat -nap | grep 7197

-----------

jmap -heap pid 看此进程的堆信息

dump java堆

jmap -dump:format=b,file=test.bin pid
jmap -dump:format=b,file=test.bin 7023

-----------------------------------------------------------------

-------------------------jstack------------------------------

jstack获得java进程中的堆栈信息 命令:jstack -l pid >d:stack.txt

可以在里面搜寻deadlock等信息,线程死锁。热锁。

也可以统计线程状态信息,如果大量线程都处于wait on condition,若看到线程正在等待网络读写,那么可能会出现了网络瓶颈。

 ---------------------------------

top查找出哪个进程消耗的cpu高 

1、top ,按住shift+p结果是按照cpu占用从高到底排序拿到pid

2、top -H -p pid,然后再按shift+p。这里意思为只查看pid的进程,线程按照cpu占用从高到底排序,显示线程tid。

jstack [进程pid]|grep -A 10 [线程tid的16进制] 

-A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。 

输出到文档:jstack [进程pid]|grep -A 10 [线程tid的16进制] >stack01.txt

用IBM thread and monitor dump analyzer for java工具  分析dump文件

说不定可以一下子定位到出问题的代码。

命令:jstack executable core

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。

JVM内存、垃圾回收相关的一些参数设置

JVM 类装载器,执行引擎,运行时数据区(内存)

GC 年轻代 年老代 永久代  gc, full gc

=========Tomcat=================

Tomcat是web容器,装载jsp servlet; Apache装载静态页面html

tomcat 开启文件压缩 线程池 设置等调优

Mysql监控 mysqlmtop

Oracle监控spotlight on oracle

===================iostat监控磁盘==================

yum install sysstat

iostat=>

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态
原文地址:https://www.cnblogs.com/AmilyWilly/p/6163657.html