性能问题定位方法

1、使用命令jps //查看Bootstrap的进程号,或者ps -ef | grep java | grep $USER也可以。

命令格式:jps //进程Bootstrap的pid

或者ps –ef|grep java|grep $USER //portal应用的pid

2、使用命令jstack //打印线程堆栈

命令格式:jstack pid > jstack.txt

Checkpoint

①是否存在死锁

e.g. 下面四没有死锁的情况。

②是否存在较多数量的blocked状态的同一线程。

3、使用命令jmap –heap //打印内存使用情况

命令格式:jmap -heap pid > heap.txt

Checkpoint

①检查内存中的新生代Young Generation、老生代Old Generation、持久代Perm Generation的使用率。一般要注意老生代的内存使用率,如果出现了90%以上,就有可能出现了内存泄露。这时候可以结合gc日志检查一下full gc是否已经出现了问题。

【案例1

在进行并发100个用户的wap门户浏览内容详情性能测试时,内存配置为2G,大约运行到12小时左右,TPS值开始出现下降的趋势,此时cpu使用率一直处于80%左右。由于打印的日志很多,运行到12小时的日志已经被覆盖掉了,因此也无法从日志入手定位。

1、先分析内存使用率

如上图,此时老生代已经几乎占满了。

2、再去检查gc日志,tomcat/bin/gc.txt如下图,full gc出现的频率也很高,而且其中一次full gc的时间长达315s,这种现象是不正常的。这里需要了解一下内存的使用顺序:先使用新生代,在新生代中中难以进行垃圾回收的线程会转移到老生代,再用full gc处理老生代中的线程。现在即使是做了full gc,但是老生代的空间仍然无法被清除,可能存在内存泄露的问题。

3、分析哪些对象占用的内存较多

如上图,定位出红笔标注的两个进程占用的内存较多,锁定可疑目标,打完收工。

4、使用命令jmap –heap:format=b //打印内存镜像,也叫内存堆栈

命令格式:jmap -heap:format=b pid

该命令使用后会在本目录下生成heap.bin,注意执行前先检查heap.bin是否已存在,避免覆盖。

备注:由于截取内存镜像信息的大小和catalina.sh配置的内存大小相近,因此需要预留足够的空间,内存为2G时,大约会耗费10min。

Checkpoint

①还不知道怎么检查

5、使用命令jmap –histo//打印不同类型的对象各有多少个

命令格式:jmap -histo pid > histo.txt  打印不同类型的对象各有多少个

Checkpoint

①检查哪些进程占用的内存较多

 

6、在tomcat/bin下面的catalina.sh文件中加入-Xloggc:gc.log可以打印gc日志

ps -fu $USER | grep sar | grep -v grep | awk ‘{print $2}‘ | xargs kill -9 >> /dev/null 2>&1

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=512M -XX:MaxNewSize=512m -XX:MaxPermSize=512m -Djava.awt.headless=true -Xloggc:gc.log"

#JAVA_OPTS="$JAVA_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=14444"

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"

# jconsole args

#JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=29819 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

# get heap dumps

#JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnCtrlBreak"

#JVM debuging params

#JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:gc.log -XX:+PrintGCDetails"

#JAVA_OPTS="$JAVA_OPTS -XX:+ShowMessageBoxOnError -verbose:gc -verbose:jni -Xprof -Xloggc:gc.log -XX:+PrintGCDetails"

 

时间: 2024-08-28 09:18:52

性能问题定位方法的相关文章

sellenium页面元素的定位方法

1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:WebElement username=driver.findElement(By.id("username")); WebElement password=driver.findElement(By.id("password"));  WebElement subimit=

不修改代码就能优化ASP.NET网站性能的一些方法

阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 回到顶部 配置OutputCache 用缓存来优化网站性能的方法,估计是无人不知的. ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指

3 Python+Selenium的元素定位方法(id、class name、name、tag name)

[环境] Python3.6+selenium3.0.2+IE11+Win7 [定位方法] 1.通过ID定位 方法:find_element_by_id('xx') 2.通过name定位 方法:find_element_by_name('xx') 3.通过class name定位 方法:find_element_by_class_name('xx') 4.通过tag name定位 方法:find_element_by_tag_name('xx') 说明:tag name在html中是标签的名字,

xpath定位方法详解

1.xpath较复杂的定位方法: 现在要引用id为“J_password”的input元素,可以像下面这样写: WebElement password = driver.findElement(By.xpath("//*[@id='J_login_form']/dl/dt/input[@id='J_password']")); 其中//*[@id=’ J_login_form’]这一段是指在根元素下查找任意id为J_login_form的元素,此时相当于引用到了form元素.后面的路径

WEB前端性能优化常见方法

web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是最重要最有效的,因为一个完整的请求要经过DNS寻址,与服务器建立连接,发送数据,等待服务器响应,接收数据这样一个消耗时间成本和资源成本的复杂的过程. 常见方法:合并多个CSS文件和js文件,利用CSS Sprites整合图像,Inline Images(使用 data:URL scheme在实际的页

CSS常用背景图片定位方法

CSS背景图片定位其实对于每一位学习前端的同学来说,都已经非常熟悉了.网上铺天盖地的最常见的一种方案就是在父元素中relative,然后子元素absolute.这种方案当然好,不过带来的一个缺点就是会改变元素的层级关系,如果在多个地方使用,这样的层叠嵌套的关系会十分混乱. 先暂时抛弃那种方案,给大家分享几种CSS背景图片定位的方案. 整篇文章会按照如下思路: 1.无依赖的absolute定位 2.background-position扩展语法 3.background-origin定位 4.ca

xpath定位方法小结(转载)

1.实例化一个浏览器WebDriver driver = new FirefoxDriver(); 2.driver.get() get传参数到浏览器中 3.常用定位方法webelement XX=driver.findElement(by.XX) 3.1 by.id("value");3.2 by.ame("value");3.3 by.xpath("/html/body/XX/div[1]/a") 表示第一个div值为a的值      by.

selenium webdriver 表格的定位方法练习

selenium webdriver 表格的定位方法 html 数据准备 <html> <body> <div id="div1"> <input name="divl1input"></input> <a href="http://www.sogou.com/">搜狗搜索</a> <img alt="div1-img1 "src=&qu

(转)HTML&amp;CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

http://blog.csdn.net/oscar92420aaa/article/details/51304067 CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中,背景图片的定位方法有3种: 1)关键字:background-position: top left; 2)像素:background-position: 0px 0px; 3)百分比:background-position: 0% 0%; 上面这三句语句,都将图片定位在背景的左上角,表面上看效果是