当前位置: 首页 > 科技观察

生产环境突然高负载!“谁”窃取了您的服务器性能?

时间:2023-03-20 16:12:57 科技观察

场景描述网站自上线以来一直稳定运行。今天早上发生的事情,刚到公司,还没到工位,手机就收到报警信息,生产环境的一台服务器突然负载过高!立即打开电脑,放下手中的早餐,开始查处。以下是诊断系统CPU性能问题的过程,希望能给大家诊断问题时一些思路。业务环境:PHP排查流程1.使用top命令查看当前系统状态,按[1]展开CPU列表2.从上图可以看出CPU占用主要是php引起的process,当前可用内存足够。现在关注CPU的情况。在这个例子中,CPU主要消耗在内核态“sy”,而不是用户态“us”。为了跟踪程序行为,通常使用两种工具:“strace”用于内核模式下的函数调用跟踪和“ltrace”用于用户模式下的函数调用跟踪。下面用strace来分析一下这个问题:[root@localhost~]#strace-cp从上图中我们可以看出,总CPU时间最长的操作是一个名为clone的调用函数,单独跟踪这条命令:[root@localhost~]#strace-T-eclone-p#-T:获取操作实际消耗的时间#-e:指定需要跟踪的操作。您可以看到克隆操作需要数百毫秒。克隆操作的作用简单来说就是调用系统函数创建(fork)一个新的。过程。现在回到PHP端分析为什么会出现这样的系统调用。查询业务代码,查看exec函数。该命令导致系统不断fork进程来处理exec执行的外部命令,导致CPU开销较大。通过以下命令验证是否确实会引起clone系统调用:[root@localhost~]#strace-eclonephp-r'exec("ls");'有同学有疑问,都是linux运维工程师,而且他们一直都是登录服务器观察资源使用情况才得到高负载告警。以往由于没有及时发现服务器的高负载,导致业务短时间内崩溃,损失惨重。您是如何在未到工位之前收到服务器负载过高的告警信息的?我用了一个云运维工具——王教授,对日常运维工作很有帮助,可以及时提醒我云资源的变化,比如服务器CPU占用率高,服务器安全组设置不安全,SQL慢等在云数据库中。使用云,运维云的同学可以选择使用。王教授工具地址:https://prof.wang。