# 注意
本文章,是针对于服务器执行命令异常慢,且开放的服务不能正常提供功能
并不是
针对于服务器中,java项目启动异常慢,这个问题,在我的其他文章里面有描述
# 情景
昨天上服务器的时候,登录都特别的慢,而且前端反映gitlab提交不了代码,显示502
等我登录服务器之后,竟然执行ls命令,都要等一会,简直不能忍,按照之前一般重装了
这么多代码,重新搞,很费时,而且好不容易遇到这个问题,绝不能放过
# 场景复现
1. 先使用w命令,查看系统负载 (如下图所示)

2. 同样也可以使用uptime查看系统平均负载 (如下图所示)
注: 这里的数值偏小,是由于本文是解决问题之后做的记录,当时没有截图
具体的数字,大致和通过w命令运行的结果相差无几

3. 当时查看内存也是充足的 (如下图所示)

3.1 可见此时内存buff/cache区域数值较大,我们可以处理下
这个地方,可能会造成gitlab的502问题
执行命令:sync && echo 3 > /proc/sys/vm/drop_caches
效果如下图所示

4. 查看系统总体的上下文切换情况 (cs(context switch)是每秒上下文切换的次数)

5. 查找R或D状态的进程
注:R: 可运行状态(Running或Runnable)
D: 不可中断状态(Uninterruptible Sleep,也称为 Disk Sleep)
这里多说一些,我这边主要是由于项目当中设置了定时任务,每秒将日志文件同步到指定目录
所以,执行当前命令后,出现了一堆任务,导致CPU频繁的切换上下文去执行,大量的进程堆积
命令如下:ps aux | awk '{if($8 ~ /R|D/) print $0 }'

6. 显示当前服务器所有运行中的进程 (可参考命令)
ps aux | less
7. 其他命令
7.1. 查看占用CPU资源最多的10个进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
7.2. 占用内存资源最多的10个进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
7.3. 查看硬盘大小
df -h
7.4. 常用查看命令
top
7.5 查看当前服务器开放的进程端口
netstat -nutlp
8. 小结
上面的命令,主要是查看当前系统的异常值,以及异常进程
主要思想就是,查看当前服务器的磁盘,内存,CPU,负载等情况
影响的可能是:定时任务,代码因素等
最直接的办法还是杀进程,不过可以根据杀的进程,进一步的追踪,
到底是什么因素影响的
我这个是由于我每秒钟执行一次同步的定时任务堆积导致的
总之一句话,不要老想着装系统,不过重启服务器也是常规的解决方法
我这种是重启服务器都不好使的,所有问题,又因必有果,一定有方法可以解决