当云服务器变得缓慢卡顿时,通常需要先检查CPU负载是否过高,如果CPU负载确实高,那么再进一步检查具体是什么进程占用了大量的CPU资源。
通过top命令查看CPU负载,远程登录后,直接输入top回车即可。
主要查看load average这个指标,后面的三个数字分别代表前1分钟、前5分钟和前15分钟的平均CPU负载。通常1核的CPU负载不应超过4,如是4核的CPU则不应超16,即CPU核数的四倍,如果超出则说明负载较高存在异常。
其他参数说明如下:
- us(user time):表示CPU执行用户进程的时间,包括ni时间。
- sy(system time) :表示CPU在内核运行时间,包括IRQ和softirq时间,系统CPU占用率高,表明系统某部份存在瓶颈,通常值越低越好。
- wa(waiting time) :CPU在等待I/O操作完成所花费的时间,系统不应该花费大量时间来等待I/O操作,否则说明I/O存在问题。
- id(idle time) :系统处于空闲期,等待进程运行。
- ni(nice time) :系统调整进程优先级所花费的时间。
- hi(hard irq time) :系统处理硬中断所花费的时间。
- si(softirq time) :系统处理软件中断所花费的时间。
- st(steal time) :被强制等待虚拟CPU的时间,此时hypervisor在为另一个虚拟处理器服务。
发现CPU负载高之后,则需要进一步检查具体是哪些进程占用了大量的CPU。top命令的显示结果可以帮助我们检查。
如上图所示,可以清楚发现php-fpm进程很占资源。php-fpm、mysql、httpd、nginx等都是站点的web进程,如存在大量的占用资源现象,通常说明网站访问量大。这时可以开启网站的访问日志进行分析,一般来说,访问日志大的其网站占用资源也大。这时可以打开日志,具体分析是本身访问量大还是存在异常访问所致,比如爬虫蜘蛛的大量爬行,程序连接的执行异常,受到cc攻击等。