Linux运行Java程序线上问题处理

Linux系统开发运维目录
排查线上应用主要排查三个主体:程序所在的应用服务器、数据库服务器、redis(redis通常位于应用服务器)。

应用服务器

基本上出问题就是df、free、top 三连,然后依次jstack、jmap

服务器硬件

查看硬盘

当磁盘容量不足的时候,应用时常会抛出如下的异常信息:

java.io.IOException: 磁盘空间不足

或者云服务器上报警“磁盘使用率”
查看磁盘整体使用率

df -h

查看某个目录下文件大小

du -sh 目录名称

在这里插入图片描述

查看内存

查看命令

free -h

在这里插入图片描述
查看占用内存前十的应用

ps aux | sort -k4,4nr | head -n 10

在这里插入图片描述

查看CPU

根据程序名称查看进程号

在 linux 显示进程的命令是ps,ps命令是Process Status的缩写。
管道符“|”:命令A|命令B,即命令1的正确输出作为命令B的操作对象。
例如ps -aux | grep “test” 的含义是在ps aux执行的结果中查找test。
ps -ef
查看redis进程:

 ps -ef | grep redis

ps -aux
ps -aux和ps -ef是同一个命令,只不过前者是标准语法,后者是BSD语法。
示例:

ps -aux | grep redis

在这里插入图片描述

根据端口号查看进程id

lsof

lsof -i:端口号

在这里插入图片描述

查看进程

ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top工具。
top查看所有进程CPU占用率

top

在这里插入图片描述

top -p查看指定进程

top -p 端口号

查看网络

查看防火墙端口是否开启
先查看防火墙状态

systemctl status firewalld

在这里插入图片描述
在防火墙开启状态下,开放端口,下图示例开放19999端口

firewall-cmd --zone=public --add-port=19999/tcp --permanent
firewall-cmd --reload

此时查看防火墙开放的端口

firewall-cmd --zone=public --list-ports

查看网络连通
使用telnet命令,不使用ping命令的原因是服务器可以禁止ping。

Java应用

jmap

yum install -y java-1.8.0-openjdk-devel-debug
yum -y whatprovides '*/jmap'

jmap -histo [pid]
jmap -histo [pid] | head -20 (前20行)
基本就可以定位到问题,我们可以看到是OomController这个类的,有关Person的相关问题。
导出整个JVM 中内存信息Dump文件(jmap -dump)
通过mat(Eclipse Memory Analysis Tools)导入dump文件进行分析,内存泄漏问题一般我们直接选Leak Suspects即可,mat给出了内存泄漏的建议。

jstack

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。

jstack 进程号 | grep 线程号

Redis

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值