第十三篇:Linux常见命令

目录

1. 如果系统突然变慢如何排查?

2. CPU突然被打满了如何解决?

3. 内存满了如何排查?

4. 查看端口的命令

5. 有没有遇到过线上问题?怎么解决的?


1. 如果系统突然变慢如何排查?

        先看日志有没有报错,看CPU、内存使用情况,连接是否被耗尽了

2. CPU突然被打满了如何解决?

主要思路是找到是哪个线程占用着CPU资源,并查看线程堆栈看线程在干啥,然后解决问题

(1)查看进程id:top

(2)查看哪个线程占用CPU资源比较多:top -H -p 1154【H指的是占用CPU资源最大的在前边 p指的是通过进程号查询】

(3)把线程id转为16进制:printf "%0x" 1384【因为线程堆栈中的nid是PID的16进制表示】

(4)查看线程堆栈:jstack 1154 | grep -A 30 "0x568"【进程id为1154,线程id的16进制表示为0x568,-A 30 是之后的30行】

3. 内存满了如何排查?

(1)查看1154进程的gc状态,每2秒刷新一次:jstat -gcutil 1154 2000

(2)查看每次gc后内存使用率有没有降下来,有两种情况。

Case1:如果降下来了,但是很快又升上去了,说明有可能是QPS比较高,这时候需要扩容

Case2:如果没降下来,说明很有可能是内存泄漏导致的。

(3)针对case2:

先用jmap命令看一下内存中对象的占用大小(jmap -histo:live pid),看能不能直接发现问题所在。

如果不能,就把dump文件下载下来,用分析软件进行分析(比如eclipse memory analyzer)。

(4)dump文件下载下来后,就要先让线上服务器可用,如果是刚上线了版本,就把服务器进行回滚;如果是很长时间没发版本,现在出现了问题,就重启服务

4. 查看端口的命令

netstat 查看端口

lsof -i tcp:[端口号] 查看是否被占用

5. 有没有遇到过线上问题?怎么解决的?

上传大excel内存溢出。

阶段性的出现接口超时。

一般情况下,线上问题的排查思路是:先看日志有没有报错,如果有的话就跟错误信息;用arthas进行线上排查问题。没有的话,看 看CPU、内存使用情况,连接是否被耗尽了等等

堆溢出:

        上传一个非常大excel文件,每一行都转换成了java对象,然后又通过JSON.toJSONString()打印了出来。JSON.toJSONString()每次都会创建新对象,这就相当于在疯狂创建对象导致了堆内存溢出。

排查过程:

        先是接收到告警,内存直接被打满了,我们把日志文件保存下来后,先立即重启了服务,确保服务依然对客可用。然后在日志中发现有OOM,堆内存溢出,幸好我们jvm配置了自动保存dump文件,下载下来后用Eclipse Memory Analyzer进行了分析,发现String对象异常多,但其实程序中String对象就是很多,继续排查,发现还有一个对象占用空间很大,然后在程序中就找到了这个对象的使用位置,进而发现了问题。

最终解决:

        首先不要打印,其次大文件限制行数

内存调优:

        发现经常会受到请求超过1秒的告警(正常200ms),也能正常返回就是耗时长,看了日志,也没有报错,然后到服务监控上看CPU和内存使用率也不是很高,想着可能是网络抖动,但是还是每天几乎都会收到告警。然后发现告警大多数是在业务高峰期的时候。

        然后就去看了一下gc.log,发现young gc的时延在1秒多(full gc一秒正常,ygc 一秒过长),时间点也能和告警时间对齐。我们当时用的是CMS垃圾回收器,CMS的回收策略是最大程度清理内存空间,而且GC的时候会有Stop The World的情况,所以GC的时延高。

解决方案:

        重点-控制每次gc时延,保证stw在可接受时间内,使用G1,可配置单次ygc的时延(最终配置的是500ms),G1会尽可能的保证gc时延不超过预期值。

使用Eureka有服务安全下线问题

        Eureka会跟服务器之间保持心跳,三次心跳失败,就会把服务器节点拿掉。但是就有一个问题,服务下线和Eureka知晓之间的时间请求都会失败。

解决问题:
        这个需要服务提供方来保证。Eureka服务端提供了一个接口,可以调用接口把服务器节点信息拿掉,服务下线前有一个回调钩子,可以在这个回调里边调用Eureka,先把节点信息拿到再shutdown服务,就可以保证服务安全下线。

6. 日常使用积累

(1)查看java进程:jps

(2)查看内存情况和GC情况: jstat -gcutil 83026 2000

(3)查看当前JVM参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值