当前位置: 首页 > news >正文

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

相关文章:

  • 非对称加密(RSA、DH密钥交换算法、数字签名)
  • EFM32外设模块—USART V1.00
  • 我的第一篇博客 Javascript继承
  • manila nfs 删除 share 分析
  • atl中控件头文件所在位置
  • input标签的type为select、radio、checkbox的使用
  • matlab练习程序(makelut/applylut)
  • “图片”--预览
  • Linux整数比较
  • ios设置textField只能输入数字用于电话号码
  • 安装Mariadb常见的问题(五)
  • 入门,创建uni-app项目
  • Java中避免表单重复提交
  • uni-app中理解,区分,使用rpx单位和px单位及样式字体的导入
  • Selenium2+python自动化27-查看selenium API
  • [笔记] php常见简单功能及函数
  • 2017届校招提前批面试回顾
  • Akka系列(七):Actor持久化之Akka persistence
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular 4.x 动态创建组件
  • canvas绘制圆角头像
  • download使用浅析
  • EOS是什么
  • Js基础——数据类型之Null和Undefined
  • Js基础知识(一) - 变量
  • JS学习笔记——闭包
  • LeetCode18.四数之和 JavaScript
  • Redux系列x:源码分析
  • SOFAMosn配置模型
  • 创建一个Struts2项目maven 方式
  • 将 Measurements 和 Units 应用到物理学
  • 让你的分享飞起来——极光推出社会化分享组件
  • 推荐一个React的管理后台框架
  • 小程序button引导用户授权
  • 责任链模式的两种实现
  • postgresql行列转换函数
  • scrapy中间件源码分析及常用中间件大全
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (Java)【深基9.例1】选举学生会
  • (附源码)计算机毕业设计高校学生选课系统
  • (四)c52学习之旅-流水LED灯
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)基于IDEA的JAVA基础10
  • (转)linux 命令大全
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .libPaths()设置包加载目录
  • .net mvc 获取url中controller和action
  • .NET 命令行参数包含应用程序路径吗?
  • .net(C#)中String.Format如何使用
  • .net实现客户区延伸至至非客户区
  • .Net中的集合