生产环境突发高负载!是“谁”偷走了你的服务器性能?

 场景描述

网站上线后一直稳定运行,谁事情发生在今天早上,生产刚到公司,环境还没走到工位,高负手机收到告警信息,载偷走生产环境中的服务某台服务器突发高负载!立马开启电脑,放下手中早餐,器性开始排查处理。谁下面是生产诊断引起系统CPU性能问题的过程,希望能给到大家一些诊断问题时的环境一些思路。

业务环境:PHP

排查过程

1、高负使用top命令查看当前系统情况,载偷走并按[1]展开CPU列表

2、服务上图可以看出来CPU占用主要是器性php进程导致,当前可用内存足够。谁现在重点看下CPU的情况。

此例子中CPU 主要消耗在内核态「sy」,服务器租用而非用户态「us」。 需要跟踪程序行为一般会用到两个工具:

内核态的函数调用跟踪用「strace」 用户态的函数调用跟踪用「ltrace」

下面使用strace来分析这次的问题:

[root@localhost ~]# strace -cp <PID> 

从上图可以看到CPU总耗时最长的操作是一个名为clone的调用函数,单独追踪下这个命令:

[root@localhost ~]# strace -T -e clone -p <PID> # -T: 获取操作实际消耗的时间 # -e: 指定需要追踪的操作 

可以看到,一个 clone 操作需要几百毫秒,clone操作的作用简单来说就是调用系统函数去创建(fork)一个新进程。现在回归到PHP侧分析为什么会出现此类系统调用。

查询业务代码看到了 exec 函数,这个命令导致了系统不断会fork进程,去处理exec执行的外部命令,导致CPU开销很大。

通过如下命令验证它确实会导致 clone 系统调用:

[root@localhost ~]# strace -e clone php -r exec("ls"); 

有同学要疑问了,源码库同是Linux运维工程师,自己从来都是登陆服务器观察资源使用情况才获取到高负载告警,之前还有因未及时发现服务器高负载情况,使得业务短时间崩溃,损失惨重。

你是如何在还没到工位时就收到服务器高负载的告警信息的呢?

我是使用了一个云运维工具——王教授,对于日常运维工作帮助确实非常大,可以及时提醒我云资源的变化情况,例如:服务器 CPU 使用率偏高、服务器安全组设置不安全、云数据库存在慢SQL等。使用云,运维云的同学可以选择使用。

王教授工具地址:https://prof.wang。亿华云计算

人工智能
上一篇:通信硬件(探索通信硬件的进展及应用领域)
下一篇:一、用户概述SSH对于远程管理一台服务器来说是一个好方法。然而,SSH仍然存在着诸多问题。服务器和客户端的通信是安全的,不过这并不意味着涉及到的主机也是安全的。向外部世界打开一个SSH服务也就意味着允许强力攻击。复制代码代码如下:DenyHosts意在由Linux系统管理员运行,以帮助其挫败对SSH服务器的攻击(也称为基于字典的攻击或强力攻击)的企图。DenyHosts充当着一个对SSH和其它服务的动态阻击器,它依靠/etc/hosts.deny和 hosts.allow进行工作,并能够以动态方式构建重复地与我们的服务器连接的主机列表。默认情况下,这项服务会阻止来自那些不断地试图与我们的主机连接并实施访问的IP地址源。Denyhosts的处理在/etc/denyhosts.conf中进行配置。我们还可以通过Iptables行连接速率的限制,而且我们还应该在服务器上部署防火墙。一旦这些布置停当,我们就会确信自己在一台面向公众的主机上拥有了一个更加安全的SSH。