您现在的位置是:亿华云 > 数据库
将Java进程转移到“解剖台”之前,法医都干了什么?
亿华云2025-10-03 06:16:01【数据库】1人已围观
简介作为法医,不怕高度腐烂的尸体,也不怕错综复杂的案情。最怕的,是没留下任何东西。空无一物,任何高超的技术,丰富的经验,都无从下手。生产环境错综复杂,几分钟前活蹦乱跳的进程,此刻就奄奄一息的躺在那里,苟延
作为法医,解剖台不怕高度腐烂的将Ja进尸体,也不怕错综复杂的程转案情。最怕的法医,是都干没留下任何东西。空无一物,解剖台任何高超的将Ja进技术,丰富的程转经验,都无从下手。法医
生产环境错综复杂,都干几分钟前活蹦乱跳的解剖台进程,此刻就奄奄一息的将Ja进躺在那里,苟延残喘。程转作为第一时间发现的法医目击者,一定要注意保存好现场。都干有时,最坏的情况就是引火上身,纠缠不清,这都是我们不愿看到的。
在进程的生命烟消云散之前,云南idc服务商我们还有很多事要做。本篇文章,将介绍常用的保留线索方法。最后,将这个过程,使用Shell脚本自动化。
系统环境,不说谎的案发现场
1、系统当前网络连接
ss -antp > $DUMP_DIR/ss.dump 2>&1本命令将系统的所有网络连接输出到ss.dump文件中。使用ss命令而不是netstat的原因,是因为netstat在网络连接非常多的情况下,执行非常缓慢。
后续的处理,通过查看各种网络连接状态的梳理,来排查TIME_WAIT或者CLOSE_WAIT,或者其他连接过高的问题,非常有用。
2、网络状态统计
netstat -s > $DUMP_DIR/netstat-s.dump 2>&1将网络统计状态,输出到netstat-s.dump文件中。它能够按照各个协议进行统计输出,对把握当时整个网络状态,有非常大的服务器托管作用。
sar -n DEV 1 2 > $DUMP_DIR/sar-traffic.dump 2>&1上面这个命令,会使用sar输出当前的网络流量。在一些速度非常高的模块上,比如redis、kafka,就经常发生跑满网卡的情况。
3、进程资源
lsof -p $PID > $DUMP_DIR/lsof-$PID.dump这是个非常强大的命令。可以查看进程打开了哪些文件,这是一个神器,可以以进程的维度查看整个资源的使用情况。这个命令在资源非常多的情况下,输出稍慢,耐心等待。
4、CPU资源
mpstat > $DUMP_DIR/mpstat.dump 2>&1 vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1 sar -p ALL > $DUMP_DIR/sar-cpu.dump 2>&1 uptime > $DUMP_DIR/uptime.dump 2>&1这几个命令,我们在《Linux之《荒岛余生》(二)CPU篇》这篇文章,已经有了比较详细的介绍。主要输出当前系统的CPU和负载,便于事后排查。
这几个命令的源码库功能,有不少重合,使用者要注意甄别。
5、I/O资源
iostat -x > $DUMP_DIR/iostat.dump 2>&1一般,以计算为主的服务节点,I/O资源会比较正常。但有时候也是会发生问题的,比如日志输出过多,或者磁盘问题等。此命令可以输出每块磁盘的基本性能信息,用来排查I/O问题。
6、内存问题
free -h > $DUMP_DIR/free.dump 2>&1内存问题较为复杂,有兴趣可以看下xjjdog堆外内存排查小结这篇文章。一般发生的问题是JVM内存溢出,我们在进程小节说明。
free命令能够大体展现操作系统的内存概况,是故障排查中一个非常重要的点。
7、其他全局
ps -ef > $DUMP_DIR/ps.dump 2>&1 dmesg > $DUMP_DIR/dmesg.dump 2>&1 sysctl -a > $DUMP_DIR/sysctl.dump 2>&1在xjjdog的其他文章,我们不止一次说到dmesg。dmesg是许多静悄悄死掉的服务留下的最后一点线索。
当然,ps作为执行频率最高的一个命令,它当时的输出信息,也必然有一些可以参考的价值。
由于内核的配置参数,会对系统产生非常大的影响。所以我们也输出了一份。
进程快照,最后的遗言
1、jinfo
${ JDK_BIN}jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1此命令将输出java的基本进程信息。包括环境变量和参数配置。
2、gc信息
${ JDK_BIN}jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1 ${ JDK_BIN}jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1jstat将输出当前的gc信息。一般,能大体看出一个端倪,如果不能,将借助jmap进行分析。
3、堆信息
${ JDK_BIN}jmap $PID > $DUMP_DIR/jmap.dump 2>&1 ${ JDK_BIN}jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1 ${ JDK_BIN}jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1 ${ JDK_BIN}jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null 2>&1jmap将会得到当前java进程的dump信息。如上所示,其实最有用的就是第4个命令,但是前面三个能够让你初步对系统概况进行大体判断。
因为,第4个命令产生的文件,一般都非常的大。而且,需要下载下来,导入MAT这样的工具进行深入分析,才能获取结果。
4、执行栈
${ JDK_BIN}jstack $PID > $DUMP_DIR/jstack.dump 2>&1jstack将会获取当时的执行栈。一般都会多次取值,我们这里取一次即可。这些信息非常有用,能够还原你的java进程中线程情况。
top -Hp $PID -b -n 1 -c > $DUMP_DIR/top-$PID.dump 2>&1为了能够得到更加精细的信息,我们使用top命令,来获取进程中所有线程的cpu信息。这样,就可以看到资源到底是耗费在什么地方。
5、高级替补
kill -3 $PID有时候,jstack并不能够运行。有很多原因,比如java进程几乎不响应了。我们会尝试向进程发送kill -3信号。这个信号是java进程享有的,将会打印jstack的trace信息到日志文件中。是jstack的一个替补方案。
gcore -o $DUMP_DIR/core $PID对于jmap无法执行的问题,也有替补,那就是GDB组件中的gcore。将会生成一个core文件。我们可以使用如下的命令去生成dump
${ JDK_BIN}jhsdb jmap --exe ${ JDK}java --core $DUMP_DIR/core --binaryheap瞬时态和历史态
xjjdog这里创建两个名词。瞬时态是指当时发生的,快照类型的元素;历史态是指按照频率抓取的,有固定监控项的资源变动图。
上面有很多信息,比如CPU,比如系统内存等,瞬时态的价值就不如历史态来的直观一些,因为它还存在一个基线问题。所以如果有监控系统一类的工具,将美好的多。
但对于lsof,heap等,这种没有时间序列概念的混杂信息,无法进入监控系统,产生有用价值,就只能够通过瞬时态进行分析。这种情况下,瞬时态的价值反而更大一些。
我已经把上面的过程,写成了一个shell脚本。你可以在github上找到它。点击左下角的查看原文,也能和它见面。
https://github.com/sayhiai/shell
但值得注意的是,分布式环境的故障原因,往往会出乎意料,你的这份单机证据,可能就只是一个表象。它没有说谎,但它背后的意义,往往对问题本质进行了错误的引导。
很赞哦!(96351)
相关文章
- 五大趋势预测:2023年边缘计算将如何发展
- a、变更前的公司证件扫描件(代码证或者营业执照)及联系人身份证复印件、变更后的公司证件扫描件(代码证或者营业执照)及新的联系人身份证复印件;身份证复印件需本人签名,公司证件复印件需加盖公章。
- 4、选择一个安全的域名注册商进行域名注册
- 2. 不要花大价钱买域名,新手鉴别能力不足,容易投资失误。
- 为什么PDU在数据中心中很重要?
- 投资各类域名就像到处打游击战,结果处处失败。因为这样,对任何一个中国域名市场的走势和价格都没有准确的把握,所以最好缩小范围,准确把握战场态势,埋伏。
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
- 中国移动政企科创专题:创“芯”体系赋能万物互联
- 顶级域名可以增加企业品牌的价值。随着经济的快速发展,域名已不再是企业在网络中的独立地位。顶级域名的服务范围、企业产品、综合形象体现等,对于企业单位来说,顶级域名的重要性不言而喻。
热门文章
站长推荐
服务器高延迟的七个原因
.com域名是国际最广泛流行的通用域名,目前全球注册量第一的域名,公司企业注册域名的首选。国际化公司通常会注册该类域名。
四、一定要仔细阅读细节
公司名字不但要与其经营理念、活动识别相统一,还要能反映公司理念,服务宗旨、商品形象,从而才能使人看到或听到公司的名称就能产生愉快的联想,对商店产生好感。这样有助于公司树立良好的形象。
戴尔数据避风港+PowerMax 妥善守护企业数据安全
g) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;
众所周知,com域名拥有最大的流通市场和流通历史。最好选择com域名,特别是在购买域名时处理域名。其次可以是cn域名、net域名、org域名等主流域名,现在比较流行的王域名和顶级域名,都是值得注册和投资的。
在更换域名后,并不是就万事大吉了,我们需要将旧域名做301重定向到新域名上,转移旧域名的权重到新域名上。