首頁  >  文章  >  運維  >  怎麼設定Linux實例頻寬和CPU跑滿或跑高排查

怎麼設定Linux實例頻寬和CPU跑滿或跑高排查

坏嘻嘻
坏嘻嘻原創
2018-09-28 14:22:573078瀏覽

本文在介紹怎麼設定Linux實例頻寬和CPU跑滿或跑高排查的基礎上,重點探討了其具體步驟,本文內容緊湊,希望大家可以有所收穫。

Linux實例頻寬和CPU跑滿或跑高排查

使用雲端伺服器ECS 時,若出現服務的速度變慢,或ECS 實例突然斷開,可以考慮伺服器頻寬和CPU是否有跑滿或跑高的問題。若您預先建立警報任務,當頻寬和 CPU 跑滿或跑高時,系統將自動進行警報提醒。 Linux 系統下,您可以依照下列步驟進行排查:

定位問題。找到影響頻寬和 CPU 跑滿或跑高的具體進程。

分析處理。排查影響頻寬和 CPU 跑滿或跑高的進程是否正常,並分類處理。

適用於 正常進程:您需要對程式進行最佳化或升級伺服器設定。

對於 異常進程:您可以手動對進程進行查殺,也可以使用第三方安全工具去查殺。

本文相關設定及說明已在 CentOS 6.5 64 位元作業系統中進行測試。其它類型及版本作業系統配置可能有所差異,具體情況請參閱相應作業系統官方文件。

如果雲端伺服器 ECS Linux 系統的 CPU 持續跑高,則會對系統穩定性和業務運作造成影響。本文針對 CPU 佔用率較高問題的檢驗分析做簡單說明。

CPU 跑滿或跑高的問題定位

#若雲端伺服器ECS 的CPU 持續跑高,會對系統的穩定性和業務運作造成影響。 Linux 系統下,檢視行程的常用指令如下:

ps -aux
ps -ef
top

Linux 系統中,通常會使用 top 指令來檢視系統的負載問題,並定位耗用較多 CPU 資源的行程。

操作步驟

透過控制台管理終端連接到 ECS 實例,請參閱使用遠端連線功能連接 ECS 實例。

說明:資源負載異常時,通常無法透過 SSH 進行遠端連接,建議您透過控制台管理終端進行連接。

透過 top 指令查看系統目前的運作情況。

 top - 17:27:13 up 27 days,  3:13,  1 user,  load average: 0.02, 0.03, 0.05
 Tasks:  94 total,   1 running,  93 sleeping,   0 stopped,   0 zombie
 %Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st
 KiB Mem:   1016656 total,   946628 used,    70028 free,   169536 buffers
 KiB Swap:        0 total,        0 used,        0 free.   448644 cached Mem
 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1 root      20   0   41412   3824   2308 S  0.0  0.4   0:19.01 systemd
 2 root      20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd

針對負載問題,您只需關注回顯的第一行和第三行信息,詳細說明如下。

top 指令的第一行顯示的內容17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05 依序為系統目前時間、系統到目前為止已運行的時間、目前登入系統的使用者數量、系統負載,這與直接執行uptime 命令查詢結果一致。

top 指令的第三行會顯示目前 CPU 資源的整體使用情況,下方會顯示各個行程的資源佔用情況。

透過字母鍵 P,可以對 CPU 使用率進行倒序排列,進而定位系統中佔用 CPU 較高的進程。

說明:透過字母鍵 M, 您可以對系統記憶體使用情況進行排序。如果有多核心 CPU,數字鍵 1 可以顯示每核心 CPU 的負載狀況。

透過 ll /proc/PID/exe 可以查看每個進程 ID 對應的程式檔案。

CPU 跑滿或跑高的分析處理

#CPU 的跑滿或跑高,在確認特定的進程結果後,針對異常的進程,您需要透過top 指令將其終止;而對於kswapd0 進程導致的記憶體不足等問題,您需要對系統進行規格的升級或程式的最佳化。

使用 top 直接終止 CPU 消耗較大的進程

您可以直接在 top 運行介面快速終止對應的異常進程。操作步驟如下:

若您想要終止某個進程,只需按下小寫的 k 鍵。

輸入想要終止的進程 PID (top 輸出結果的第一列)。例如,若您想要終止 PID 為 86 的進程,輸入 86 後按回車即可。

操作成功後,介面會出現類似 Send pid 86 signal [15/sigterm] 的提示訊息。按回車確認即可。

kswapd0 進程佔用導致CPU 較高

#作業系統都用分頁機制來管理實體內存,系統會把一部分硬碟空間虛擬成內存使用。由於記憶體的速度比磁碟快得多,所以系統要依照某種換頁機制將不需要的頁面換到磁碟中,將所需的頁面調到記憶體中。

kswapd0 是虛擬記憶體管理中負責換頁的進程,當伺服器記憶體不足的時候 kswapd0 會執行換頁操作,這個換頁操作是十分消耗主機 CPU 資源的。操作步驟如下:

透過 top 指令查看 kswapd0 進程。

检查该进程是否持续处于非睡眠状态,且运行时间较长。若是,可以初步判定系统在持续地进行换页操作,kswapd0 进程占用了系统大量 CPU 资源。

怎麼設定Linux實例頻寬和CPU跑滿或跑高排查

您可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。

针对系统当前内存不足的问题,您可以重启 Apache,释放内存。

说明:从长远的角度来看,您需要对内存进行升级。

带宽跑满或跑高的分析处理

对于正常进程导致的带宽跑满或跑高的问题,需要对服务器的带宽进行升级。对于异常进程,有可能是由于恶意程序问题,或者是部分 IP 恶意访问导致,也可能是服务遭到了 CC 攻击。

通常情况下,您可以使用 iftop 工具或 nethogs 查看流量的占用情况,进而定位到具体的进程。

使用 iftop 工具排查

在服务器内部安装 iftop 流量监控工具。

 yum install iftop -y

 服务器外网带宽被占满时,如果通过远程无法登陆,可通过阿里云终端管理进入到服务器内部,运行下面命令查看流量占用情况:

 iftop -i eth1 -P

注意:-P 参数将会显示请求端口。执行 iftop -i eth0 -P 命令,可以查看通过服务器哪个端口建立的连接,以及内网流量。举例如下:

在上图中,您可以查看到流量高耗的是服务器上 53139 端口和 115.205.150.235 地址建立的连接。

执行 netstat 命令反查 53139 端口对应的进程。

 netstat -tunlp |grep 53139

 经反查,服务器上 vsftpd 服务产生大量流量,您可以通过停止服务或使用 iptables 服务来对指定地址进行处理,如屏蔽 IP 地址或限速,以保证服务器带宽能够正常使用。

使用 nethogs 进行排查

在服务器内部安装 nethogs 流量监控工具。

 yum install nethogs -y

通过 nethogs 工具来查看网卡上进程级的流量信息,若未安装可以通过 yum、apt-get 等方式安装。举例如下:

若 eth1 网卡跑满,执行命令 nethogs eth1。

查看每个进程的网络带宽情况以及进程对应的 PID。

确定导致带宽跑满或跑高的具体进程。

若进程确定是恶意程序,可以通过执行 kill -TERM 来终止程序。

说明: 如果是 Web 服务程序,您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量。日志分析可以使用 logwatch 或 awstats 等工具进行。

使用 Web 应用防火墙防御 CC 攻击

若您的服务遭受了 CC 攻击,请在 Web 应用防火墙控制台尽快开启 CC 安全防护。

登录 Web应用防火墙 控制台。

在 CC 安全防护中,启动状态按钮,并在模式中选择 正常。

怎麼設定Linux實例頻寬和CPU跑滿或跑高排查

以上是怎麼設定Linux實例頻寬和CPU跑滿或跑高排查的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn