有没有发现你的网站运行一段时间,就开始出现各种资源占用过高的情况,比如CPU占用100%,内存占用100%等。有些,可能会出现负载占用过高的情况。今天,我们就来从几个方面,展开讨论,告诉你哪些情况会出现这种资源占用过高,以及通过哪些操作判断资源占用过高的原因。
当然,本文适用于任何Linux系统,可用于判断各种系统进程占用情况的判断。
top命令判断法
首先,当你资源占用过高时,请立即ssh登录服务器终端,通过top命令,查看进程占用情况。这里,给出top命令使用的几个常见用法:
- ssh终端输入top命令
- 默认以pid序号对进程排序,可以摁下shift+>或者shift+<来切换排序方式。一般情况下,你可以切换到cpu排序方式或者内存排序方式,查看进程占用最高的进程。然后来分析进程是否正常。
- 一般建站,除去mysql、memcached、apache、nginx、php等,如果出现占用过高,都有理由怀疑是被黑了。不过,还是要具体问题具体分析。这种其他进程占用高的情况,如果是games之类的用户名,那就是挖矿程序。其他的我也没见过。
- 如果是mysql占用过高,那么一般是在被cc。
- 如果是nginx或者apache占用过高,这个时候你就需要优化下nginx或者apache了,或者直接升级配置吧。
此外,你也可以通过htop命令,更加直观的观察进程占用情况。htop是一个相对于top更加高级的进程管理软件,详情可以查看我之前的教程:《Centos 8安装htop查看系统所有进程》。
资源占用过高解决办法
内存占用高
关于资源占用高的情况,分很多种,前面我们也有提到过。如果你是单纯的用了一段时间,发现占用慢慢变高。这里,一般是内存占用过高,而cpu没什么变化。这种情况,是由于缓存内存累计导致的。这种情况,你会发现系统重启就好了,但用了一段时间发现内存占用又飙高了。
这时,你可以通过free -m命令,查看各项指标,输出结果一般如下:
[root@iZwz98biiph4vhee88vxj8Z ~]# free -m total used free shared buff/cache available Mem: 3624 1382 1339 31 903 1999 Swap: 4095 0 4095
你要看是不是buff/cache很高很高,这个是一部分程序运行缓存到了内存里。相当于这部分内存随时都要调用,当然我的理解也可能不太准确。总之,你清理这个cache内存,不会对系统造成任何不适,也不会影响网站运行速度。感兴趣的,可以参考我之前的教程:《Centos 8.*自动定期清理cache化内存脚本》,该教程适用于任何Linux系统。
此外,还有一种nginx和apache引起的内存占用过高,也是用一段时间发现内存越来越高。这种,你就要优化下nginx或者apache了。不过,nginx很好出现这种情况,而且我也没用过nginx,所以不列教程。对于apache,可以参考我之前写教程:《Apache服务器工作模式内存优化策略》。
cpu占用过高
这种情况,正常来说是正在被攻击。为了避免这种情况,说实在的,装个软件防护吧。或者,用cdn吧。不过,用cdn被攻击,也可能会被回源,还是扛不住。那么,我来教你解决方法吧,装个wp super cache,把页面缓存成静态。这样,不管回源还是没有cdn情况的攻击,都不会再造成cpu急速上升的问题。但是,你需要注意的是,如果攻击者高明,疯狂用软件在网站里随机搜索字符串,这种也会频繁读取数据库。
关于以上这两点,我都有写过教程,可以参考:《WP Super Cache插件使用我所推荐的设置》(网站静态化)以及《WordPress负载/CPU/内存资源占用过高》(屏蔽默认搜索功能)。
我还要说一嘴,如果你用了memcached,也要小心随机搜索字符串这种攻击,内存直接会100%。一般情况,我是建议屏蔽掉wordpress搜索功能的。
综述
以上只是个大概判断过程,具体问题最终还是要看到底哪个进程占用异常。最后,补充说明一点我的建议:少用来历不明的源码,少用来历不明的主题破解版。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/2050.html