线上服务器内存飙升怎么排查?

一.线上服务器内存飙升怎么排查?

1.通过top命令查看cpu、内存占用情况

2.通过shift+m命令按内存占用排序查看哪个java进程占用内存高,获取pid

3.通过jmap -histo pid 打印当前所有对象个数(使用命令jamp -histo pid > log.txt 存储到文件中,下载命令sz log.txt),打开文件查看哪些类是自己包下的业务类,初步判断哪些类产生的对象多

4.通过jmap -heap pid查看堆的新生代、老年代的使用情况

5.通过jmap -dump:format:b,file=heap.hprof pid导出堆转储文件,在线上导出的的时候先把某台及其从负载均衡去掉,通过MAT或者jdk自带的visualVM分析文件

二.线上服务器cpu飙升怎么排查?

1.通过top/htop命令查看cpu、内存占用情况,获取cpu占用最高的pid

2.通过top -Hp pid命令查看cpu占用最高的线程tid

3.通过printf '%x' tid命令把tid字符型转成16进制整型输出,例如8ef

4.通过jstack pid打印栈信息,然会下载到本地文件

5.根据8ef在文件中搜索,找到打印的线程栈报错的java代码

线程状态:

NEW,未启动的。不会出现在Dump中。

RUNNABLE,在虚拟机内执行的。

BLOCKED,受阻塞并等待监视器锁。

WATING,无限期等待另一个线程执行特定操作。

TIMED_WATING,有时限的等待另一个线程的特定操作。

TERMINATED,已退出的。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线上内存飙升是一个比较严重的问题,如果不及时处理,可能会导致系统崩溃。以下是一般的排查问题的过程: 1. 监控告警分析:系统应该有监控告警机制,如果内存使用率过高,应该及时发出告警并记录监控数据。首先,需要分析告警信息和监控数据,确认内存使用率确实出现了异常。 2. 定位问题代码:通过监控工具、日志和代码调试等方法,确定哪些代码出现了内存使用率飙升的问题。可以使用 JVM 的内存分析工具,例如 jmap、jhat、jstack、VisualVM 等来分析内存使用情况,并找出内存泄漏的代码位置。 3. 解决问题代码:根据定位出的代码问题,进行修复。对于内存泄漏问题,需要分析代码中的对象生命周期,释放不再使用的对象,并检查是否存在对象引用未释放的情况。对于频繁创建和销毁对象、大对象等问题,需要优化代码逻辑,减少内存占用。 4. 测试验证:完成修复后,需要进行测试验证,确保问题得到了解决,并且没有引入新的问题。 5. 监控预警优化:针对该问题,需要优化监控预警机制,避免类似问题再次出现。可以增加更加详细的监控数据、设置更加敏感的告警阈值等等。 总之,线上内存飙升是一个比较严重的问题,需要及时发现、定位、修复和验证。同时,也需要优化监控预警机制,避免类似问题再次出现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值