@郑昀 整理


标准做法一:OOM触发HeadpDump

目的:

OOM发生时,输出堆栈快照文件,供研发人员分析。

JVM中,如果98%的时间是用于 GC 且可用的 Heap size 不足2%的时候,将抛出 OOM 异常。

配置操作:

Resin/Tomcat 配置文件里追加 -XX:+HeapDumpOnOutOfMemoryError ,当 OutOfMemoryException 错误发生时,会自动生成 Heap Dump 文件。

同时配置 -XX:HeapDumpPath 指定快照文件的实际路径。

日志分析:

Heap Dump文件的分析,可以使用 Eclipse Memory Analyzer tool(MAT) 分析。

标准做法二:系统负载高触发ThreadDump

目的:

系统负载大于10时,调用 jstack命令,输出 resin 线程快照,供研发人员分析。

配置操作:

一分钟扫描一次。如果系统的一分钟负载值(load1)大于10,或者80端口的连接数大于80时,进行打印。

日志分析:

Thread Dump文件的分析,可以使用 Thread Dump Analyzer(TDA)分析。

可选做法三:年老代使用率高触发HeapDump

目的:

Java工程的 OU/OC 到报警阈值时,调用 jmap 命令,输出堆栈快照,供研发人员分析。

OC 当前年老代空间容量。Current old space capacity (KB).

OU 年老代利用情况。Old space utilization (KB).

配置操作:

Nagios 监控到特定工程的 OU/OC 大于80%时,自动执行命令:jmap –dump:file={filename},format=b pid

日志分析:

多个Heap Dump文件的对照,使用 VisualVM 的比较内存快照功能。

标准做法四:默认开启GC打印

目的:

打印 GC 详细信息,供研发人员分析。

-XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]

-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

-XX:+PrintGCTimeStamps:输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]

-Xloggc:filename:输出GC信息到日志文件。

配置操作:

Resin/Tomcat 配置文件里,增加如下参数:

<jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg>

<jvm-arg>-XX:+PrintGCDetails</jvm-arg>

<jvm-arg>-Xloggc:/data/application/%ProjectName%/logs/gc.log</jvm-arg>

郑昀 2013

-over-


赠图一枚:

线上Java应用排查和诊断规范的更多相关文章

  1. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  2. java线上应用故障排查之二:高内存占用【转】

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查. 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGe ...

  3. 一次线上OOM故障排查经过

    转贴:http://my.oschina.net/flashsword/blog/205266 本文是一次线上OOM故障排查的经过,内容比较基础但是真实,主要是记录一下,没有OOM排查经验的同学也可以 ...

  4. 【JVM】线上应用故障排查

    高CPU占用 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障. 通过ps aux ...

  5. 线上服务器CPU100%排查,Linux进程消耗查看

    线上服务器CPU100%排查,Linux进程消耗查看 1.排查步骤 1.1Linux下排查 1.1.1查消耗cpu最高的进程PID 1.1.2根据PID查出消耗cpu最高的线程号 1.1.3根据线程号 ...

  6. 线上Java程序占用 CPU 过高,请说一下排查方法?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  7. java线上服务问题排查

    1.业务日志相关 假设系统出现异常或者业务有异常,首先想到的都是查看业务日志 查看日志工具: less 或者more grep tail -f filename 查看实时的最新内容 ps:切忌vim直 ...

  8. Java线上应用故障排查

    线上故障主要2种: CPU利用率很高, 内存占用率很大 一.CPU利用率很高 1. top查询那个进程CPU使用率高 2. 显示进程列表 ps -mp pid -o THREAD,tid,time 找 ...

  9. MySQL死锁系列-线上死锁问题排查思路

    前言 MySQL 死锁异常是我们经常会遇到的线上异常类别,一旦线上业务日间复杂,各种业务操作之间往往会产生锁冲突,有些会导致死锁异常.这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现,并且分 ...

随机推荐

  1. POJ1285 Combinations, Once Again(背包 排列组合)

    背包解组合数学问题,n种物品,每种num[i]个,求取r个的方法数. 背包思想,f[j]表示当前取j个数的方法数,则状态转移方程为 f[j] += f[k](max(j - num[i], 0) &l ...

  2. php开启mysqli扩展之后如何连接数据库

    Mysqli是php5之后才有的功能,没有开启扩展的朋友可以打开您的php.ini的配置文件;相对于mysql有很多新的特性和优势,需要了解的朋友可以参考下 Mysqli是php5之后才有的功能,没有 ...

  3. [Outlook] outlook如何实现自动CC和BCC邮件发送

    由于需要在不同机器上发送邮件,最终发送的邮件会在不同的机器上,最终导致邮件丢失,以后想找也找不回来,故在网上搜索一翻,找到解决办法. 1. 实现自动CC邮件发送: 方法:使用outlook的配置规则 ...

  4. Linux命令之ar - 创建静态库.a文件和动态库.so

    转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...

  5. unity3D与网页的交互---做项目的一点总结

    (来自博客园) 由于项目需要,要求用unity来展示三维场景,并在三维中能够方便的查询数据库等.一开始尝试在unity中直接连接数据库,当时连的xml,然而每次发布成网页后都会出现路径找不到等问题,所 ...

  6. Sublime Text 3 安装Go语言相关插件gosublime

    1.打开Sublime Text,使用快捷键 ctrl+` (左上角Tab键上方,Esc键下方)或者使用菜单 View > Show Console menu,此时将出现Sublime Text ...

  7. WPF中的依赖项属性

    Form cnblogs 桂素伟 随着WPF的推广,不得不重新拾起WPF来,因为这块的产品越来越多. 只能跟着MSDN来学了,所以想是在这里记录下学习的过程和对知识的理解. 先从最基本的吧,依赖项属性 ...

  8. Android学习笔记(一)——安卓开发环境搭建

    安装教程以及资源(2015.11.8最新版):链接:http://pan.baidu.com/s/1kTnOsMr 密码:0ogf

  9. SSH 小总

    SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层,以 ...

  10. Jmeter之录制脚本(二)

    上一节已经已经介绍过Jmeter的安装,对于web测试的话,经常会用到一些脚本去执行某些功能,也就是所谓的半自动化测试, 对于不懂代码的童鞋来说,脚本是一个很头疼的概念,badboy的录制是一个对于刚 ...