• 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状态
  • 相关阅读:
    mysql语句-DDL语句
    Web框架本质
    HTTP协议那些事儿(Web开发补充知识点)
    利用random模块生成验证码
    前端小练习
    常用模块collections
    强大的图片展示插件,JQuery图片预览展示插件
    笔记本电脑清除BIOS密码
    js中的new Option默认选中
    使用PHPMailer发送邮件
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/6163657.html
Copyright © 2020-2023  润新知