JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!
码农突围
共 10273字,需浏览 21分钟
· 2020-10-06
点击上方“码农突围”,马上关注
这里是码农充电第一站,回复“666”,获取一份专属大礼包
真爱,请设置“星标”或点个“在看”
CPU 磁盘 内存 GC问题 网络
CPU
使用jstack分析cpu问题
printf '%x\n' pid
得到nidjstack pid |grep 'nid' -C5 –color
cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
来对jstack的状态有一个整体的把握,如果WAITING之类的特别多,那么多半是有问题啦。频繁gc
上下文切换
磁盘
内存
堆内内存
OOM
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Caused by: java.lang.OutOfMemoryError: Meta space
Stack Overflow
Exception in thread "main" java.lang.StackOverflowError
使用JMAP定位代码内存泄漏
-XX:+HeapDumpOnOutOfMemoryError
来保存OOM时的dump文件。gc问题和线程
堆外内存
OutOfMemoryError: Direct buffer memory
。-XX:NativeMemoryTracking=summary
或者 -XX:NativeMemoryTracking=detail
,会有略微性能损耗。GC问题
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
来开启GC日志。youngGC过频繁
youngGC耗时过长
触发fullGC
并发阶段失败:在并发标记阶段,MixGC之前老年代就被填满了,那么这时候G1就会放弃标记周期。这种情况,可能就需要增加堆大小,或者调整并发标记线程数-XX:ConcGCThreads。 晋升失败:在GC的时候没有足够的内存供存活/晋升对象使用,所以触发了Full GC。这时候可以通过-XX:G1ReservePercent来增加预留内存百分比,减少-XX:InitiatingHeapOccupancyPercent来提前启动标记,-XX:ConcGCThreads来增加标记线程数也是可以的。 大对象分配失败:大对象找不到合适的region空间进行分配,就会进行fullGC,这种情况下可以增大内存或者增大-XX:G1HeapRegionSize。 程序主动执行System.gc():不要随便写就对了。
jinfo -flag +HeapDumpBeforeFullGC pid
jinfo -flag +HeapDumpAfterFullGC pid
网络
超时
读写超时。readTimeout/writeTimeout,有些框架叫做so_timeout或者socketTimeout,均指的是数据读写超时。注意这边的超时大部分是指逻辑上的超时。soa的超时指的也是读超时。读写超时一般都只针对客户端设置。
连接超时。connectionTimeout,客户端通常指与服务端建立连接的最大时间。服务端这边connectionTimeout就有些五花八门了,jetty中表示空闲连接清理时间,tomcat则表示连接维持的最大时间。
其他。包括连接获取超时connectionAcquireTimeout和空闲连接清理超时idleConnectionTimeout。多用于使用连接池或队列的客户端或服务端框架。
TCP队列溢出
netstat -s | egrep "listen|LISTEN"
ss命令,执行ss -lnt
RST异常
端口不存在
主动代替FIN终止连接
TIME_WAIT和CLOSE_WAIT
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
来查看time-wait和close_wait的数量ss -ant | awk '{++S[$1]} END {for(a in S) print a, S[a]}'
TIME_WAIT
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
CLOSE_WAIT
最后,这里再跟大家推荐一本程序员必知的硬核基础知识,这是一本非常入门的经典 PDF,看完能让你对计算机有一个基础的了解和入门,是培养你 内核 的基础,我们看下目录大纲
计算机基础
来领取这本 PDF。最近热文
• 突发!Windows XP 源代码泄露 • 为什么我强烈建议大家使用 Linux 开发? • 灵魂一问:一个TCP连接可以发多少个HTTP请求? • 保送北大,连发三篇Science,这位80后川妹子近日再发重磅级研究成果! 最近整理了一份大厂算法刷题指南,包括一些刷题技巧,在知乎上已经有上万赞。同时还整理了一份6000页面试笔记。关注下面公众号,在公众号内回复「刷题」,即可免费获取!回复「加群」,可以邀请你加入读者群!
明天见(。・ω・。)ノ♡
评论
英伟达Blackwell平台网络配置分析
本文来自“英伟达Blachwell平台网络配置详解”。GTC大会英伟达展示了全新的 Blackwell 平台系列产品,包括 HGX B100 服务器、NVLINK Switch、GB200Superchip Computer Node、Quantum X800 交换机和 CX8 网卡(InfiniB
架构师技术联盟
0
CXL:破解AI时代“内存墙”新途径
AI大模型的快速发展推动“算力”和“存力”需求快速增长,“内存墙”问题由来已久,在 AI 时代表现的愈发明显,“算力”和“运力”之间的差距越来越大。Transformer 类的模型参数的数量呈现指数增长,每两年增加 410 倍,而 GPU 内存仅以每两年 2 倍的速度扩展。1、AI时代“内存墙”问题
架构师技术联盟
0
豆瓣9.7,这部Java神作第3版重磅上市!
文末赠书Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦!该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第 3 版已是 Java 程序员的必读神书,被誉为“Java 四大名著之一”,甚至连
编码之外
0
从原理到实践:掌握DPDK内存池技术
前言:本文整理下之前的学习笔记,基于DPDK17.11版本源码分析。主要分析一下内存管理部分代码。一、概述内存管理是数据面开发套件(DPDK)的一个核心部分,以此为基础,DPDK的其他部分和用户应用得以发挥其最佳性能。本系列文章将详细介绍DPDK提供的各种内存管理的功能。但在此之前,有必要先谈一谈为
开源Linux
0
大量 Java 开源项目停更...
点击关注公众号,Java 干货及时推送↓推荐阅读:投了 100 多份简历后…出品 | OSC开源社区(ID:oschina2013)Sonatype 发布了最新的一份《软件供应链状况》报告,深入探讨了如何在充满选择的世界中定义更好的软件,并探讨人工智能 (AI) 对软件开发的深远
Java技术栈
0
AI数据中心网络架构需求:400/800G光模块
随着AI技术和相关应用的不断发展,大模型、大数据和AI计算能力在AI发展中的重要性日益凸显。大模型和数据集构成AI研究的软件基础,而AI算力是关键的基础设施。在本文中,我们将探讨AI发展对数据中心网络架构的影响。下载链接:AI数据中心网络架构需求:400/800G光模块Fat-Tree数据中心网络架
架构师技术联盟
0
超大规模数据中心网络架构及其技术演变
本文所讲的数据中心网络架构和技术范围是针对典型的大型互联网和云计算公司的超大规模数据中心(Hyperscale Data Center),不一定适合其他类型的数据中心网络。业界对于什么规模才算是“超大规模(Hyperscale”并没有一个精确的定义。一般来说,一个数据中心网络集群至少有 5000台服
数据中心运维管理
0
Java 神作,必读!
Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦!该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第 3 版已是 Java 程序员的必读神书,被誉为“Java 四大名著之一”,甚至连 Java
小哈学Java
0