性能分析
东境物语
欢迎访问!!!
展开
-
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
1、故障现象故障1:客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。故障2:数据结转时,CPU使用达到100%报警,同时数据没有继续结转。2、CPU占用过高问题定位2.1、定位问题进程使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占...转载 2019-10-16 10:54:35 · 421 阅读 · 1 评论 -
Java内存泄漏发生的情况
虽然Java自带垃圾回收机制(GC),程序员不需要手动进行内存管理,但是仍然会出现内存泄漏的情况。尽管如此,Java的自动内存管理,比起C/C++,内存泄漏的情况大大减少了。下面总结下什么情况下会发生Java内存泄漏。静态集合类在使用Set、Vector、HashMap等集合类的时候需要特别注意,有可能会发生内存泄漏。当这些集合被定义成静态的时候,由于它们的生命周期跟应用程序一样长,这时候...转载 2016-01-19 18:17:08 · 4249 阅读 · 13 评论 -
BTrace工具(linux版)---线上调试神器
如果在分析线上问题时,发现日志打的不全,无法定位怎么办?添加日志重新上线,不是一个好方法,特别是调试时,可能要反复添加日志来定位问题或者线上出现的问题很难再复现,根本就没有机会添加日志再继续分析,这时就可以使用btrace。 btrace是jvm实时监控的工具,是性能调优和线上问题诊断的神器,btrace基于动态字节码修改技术,来实现对运行时的java程序进行跟踪和替换。也就是...原创 2019-07-02 22:23:31 · 2245 阅读 · 0 评论 -
JDK8 BTrace 工具的简单使用(windows界面版)
以下的内容,我是在jdk8上进行的(注意:jdk版本不能太低),是windows版的界面化。linux版的参考:https://blog.csdn.net/wwd0501/article/details/94485618一、BTrace的安装 运行jvisualvm.exe 运行后是这个页面,点击工具-》插件点击插件后出现这个页面...原创 2019-07-02 21:28:19 · 1122 阅读 · 4 评论 -
CMS之promotion failed&concurrent mode failure
CMS并行GC收集器是大多数JAVA服务应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题:promotion failed该问题是在进行Minor GC时,Survivor Space放不下,对象只能放入老年代,而此时老年代也放不下造成的。(promotion failed时老年代CMS还没有机会进行回收,又放不下转移到老年代的对象,因此会出现下一...转载 2019-06-12 21:11:59 · 520 阅读 · 0 评论 -
JVM实用参数(六) 吞吐量收集器
在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准:吞吐量越高算法越好 暂停时间越短算法越好首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。 JVM在专门的线程(GC threads)中执行GC。 只要GC线程是活动的,它们将与应用程序线程(application threads)争用当前...转载 2019-06-12 19:58:37 · 380 阅读 · 0 评论 -
频繁ygc
ygc频繁的case很多人都问过我多久一次的ygc叫频繁,其实由于ygc通常是非常快的(几十ms或更低),所以通常来说ygc很频繁的发生也不会造成太大的影响,例如我们很多生产系统都是4s左右一次ygc。ygc频繁是比较难查的,原因是ygc频繁,但通常来说都是ygc后就回收掉了,所以内存dump下来是看不出什么的,对于这个case我给的建议是多jmap -histo [pid]几次,原因是希望...转载 2019-06-12 15:33:15 · 10910 阅读 · 1 评论 -
GC算法实现
在了解了上一章中GC算法的基本概念之后,本章将深入到各GC算法的具体实现中。对大多数JVM来说,一般需要选择两种GC算法,一种用于回收新生代内存区,另一种用于回收老年代内存区域。 新生代和老年代GC算法的可能组合如下表所示,如果不指定的话,将会在新生代和老年代中选择默认的GC算法。下表中的GC算法组合是基于Java 8的,在其他Java版本中可能会有所不同。新生代GC算法 老年代G...转载 2019-06-11 21:13:18 · 627 阅读 · 0 评论 -
频繁Full GC(Ergonomics)----自动选择和调优引发的FullGC
通过GC日志可以获取JVM在GC时的详细信息。GC日志既可以直接在命令行输出,也可生成到指定的日志文件中。关于GC日志,可以由很多JVM参数来控制-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/home/logs/gc.log199.879: [Full GC...转载 2019-06-11 20:51:13 · 9270 阅读 · 1 评论 -
fullgc问题解决:Full GC (Metadata GC Threshold)-------元空间引发的FullGC
#问题描述在工作过程中,遇到一个问题:Tomcat在重启或者发布的时候,会有多次的full GC。JDK版本是1.8首先排查JVM的问题,就要把GC日志打开-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/home/logs/gc.log重启Tomcat...转载 2019-06-11 19:31:03 · 4002 阅读 · 0 评论 -
GC(Allocation Failure)
日前查看某个程序的日志,发现一直在报GC相关的信息,不确定这样的信息是代表正确还是不正确,所以正好借此机会再复习下GC相关的内容:以其中一行为例来解读下日志信息:[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.0025...转载 2019-06-11 20:22:17 · 10669 阅读 · 0 评论 -
如何使用jstack分析线程状态
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按c...转载 2019-06-10 20:24:36 · 362 阅读 · 0 评论 -
jvm 性能调优工具之 jstat
概述Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat 用法option: 参数选项 -t: 可以在打印的列加上Time...转载 2019-06-10 17:21:14 · 182 阅读 · 0 评论 -
如何找到CPU飙升的原因
CPU飙升在日常系统运维过程中并不少见,本文将介绍如何快速找出Java应用CPU飙升的原因。在开始之前,我们想想,想要定位Java应用的CPU飙升的原因,我们需要知道哪些信息?以下是我的答案:首先,需要知道哪个进程占用CPU比较高, 其次,需要知道占用CPU高的那个进程中的哪些线程占用CPU比较高, 然后,需要知道这些线程的stack trace。找出了CPU占用高的线程号和其stack...转载 2018-10-23 09:40:56 · 2990 阅读 · 0 评论 -
TCP CLOSE_WAIT 过多解决方案
一、“多半是程序的原因”?这个还是交给程序猿吧二、linux 下 CLOSE_WAIT过多的解决方法情景描述:系统产生大量“Too many open files” 原因分析:在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了1024个,且均处于close_wait的状态,最终造成配置的port被占满转载 2017-11-30 11:28:07 · 43826 阅读 · 1 评论 -
一次服务端大量CLOSE_WAIT问题的解决
今天在运行服务器的时候发现一个问题,问题的表现是客户端一直在请求,但是返回给客户端的信息是异常,服务端压根没有收到请求,查看了一下配置信息没有错误,首先查看了一下是不是服务器的连接已经满了,打开netstat命令发现服务器的连接有大量的CLOSE_WAIT状态的socket,没怎么遇到这个问题,开始还真有段懵了,第一反应就是是不是客户端的问题(是不是出问题的第一反应都是别人的问题),但是马上补充了转载 2017-11-30 10:50:37 · 7251 阅读 · 0 评论 -
linux服务器出现大量CLOSE_WAIT状态的连接
linux服务器出现大量CLOSE_WAIT状态的连接昨天服务器停止服务,node.js进程耗光了服务器的内存及CPU,node.js进程卡死无法被 kill 掉,最后要来root帐号密码,直接 kill -9 才结束掉进程。再次鄙视一下 forever ,杀不掉原来的 node.js 进程组也就罢了,竟然又拉起了一套新的 node.js 进程组。统计了一下 10 万个fd都耗光了转载 2017-11-30 10:44:39 · 6183 阅读 · 0 评论 -
服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令:[plain] view转载 2017-11-29 17:52:13 · 919 阅读 · 0 评论 -
linux服务器出现大量TIME_WAIT的解决方法
今天突然发现博客的访问速度变得缓慢,反复查找原因,发现服务器存在大量的TIME_WAIT连接。通过netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’命令进行查询,反馈结果为:TIME_WAIT 236ESTABLISHED 13LISTEN 11显然TIME_WAIT 的数量过于转载 2017-11-29 17:59:17 · 2493 阅读 · 0 评论 -
HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查
今天解决了一个HttpClient的异常,汗啊,一个HttpClient使用稍有不慎都会是毁灭级别的啊。这里有之前因为route配置不当导致服务器异常的一个处理:http://blog.csdn.net/shootyou/article/details/6415248里面的HttpConnectionManager实现就是我在这里使用的实现。问题表现:t转载 2017-11-29 17:46:56 · 755 阅读 · 0 评论 -
JVM调优
jvm工具jps显示系统中所有Hotspot虚拟机进程jstat收集Hotspot虚拟机各方面运行数据jstack显示虚拟机的线程栈信息jinfo显示虚拟机的配置信息jmap用于生成虚拟机的内存快照信息jvm内存结构左边蓝色是虚存(应用运行时额外使用的内存,主要是系统级线转载 2016-01-18 16:48:59 · 1207 阅读 · 0 评论 -
内存泄露分析OutOfMemoryError-(Memory Analyzer Tool,MAT)
大家在开发J2EE应用时可能经常碰到OOM(OutOfMemoryError)的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。OOM的原因,是Old区在FULL GC之后的剩余空间,仍然无法承载Young区要晋升的对象大小。本文是通过MAT工具进行分析。首先我们要知道,MAT通过分析OOM后的Java heap dump文件,通过对dump文件的分析找到内原创 2017-11-28 16:50:42 · 1130 阅读 · 0 评论 -
IBM HeapAnalyzer简介使用
IBM®HeapAnalyzer 创建者:Jinwoo Hwang(JinwooHwang.com) 欢迎来到IBM HeapAnalyzer。IBM HeapAnalyzer允许您使用其获得专利的启发式搜索引擎查找可能的Java™堆泄漏,并分析Java堆转储。 介绍Heapdump包含堆中所有对象的列表。此工具分析Java SDK 1.3.1,1.4.x,5.0原创 2017-11-28 17:26:30 · 17748 阅读 · 0 评论 -
Java堆溢出OutOfMemoryError之代码实例和原因分析
本文演示了编写代码使得出现”java.lang.OutOfMemoryError: Java heap space”异常,分析GC日志得出OOM的原因,同时对堆转储文件进行分析,以查看把Heap塞满的罪魁祸首;实例代码这段代码来自《深入理解Java虚拟机-JVM高级特性与最佳实践》一书:用于测试Java堆OOM的代码原创 2017-11-28 15:51:21 · 7207 阅读 · 0 评论 -
cpu占用高分析
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示线程列表:ps转载 2017-11-28 14:34:50 · 1649 阅读 · 0 评论 -
高并发压力测试工具Locust(蝗虫)
What is Locust?Locust is an easy-to-use, distributed, user load testing tool. It is intended for load-testing web sites (or other systems) and figuring out how many concurrent users a system can h转载 2017-10-31 16:12:14 · 5045 阅读 · 0 评论 -
Linux使用jstat命令查看jvm的GC情况
Linux使用jstat命令查看jvm的GC情况Options,选项,我们一般使用 -gcutil 查看gc情况 vmid,VM的进程号,即当前运行的java进程号 interval,间隔时间,单位为秒或者毫秒 count,打印次数,如果缺省则打印无数次 通常运行命令如下:jstat -gc 12538 5000即会每5秒一次显示进程号为12转载 2017-10-31 15:36:24 · 6094 阅读 · 1 评论