>  기사  >  운영 및 유지보수  >  Linux 인스턴스 대역폭을 설정하고 CPU가 가득 찼거나 높은 경우 문제를 해결하는 방법

Linux 인스턴스 대역폭을 설정하고 CPU가 가득 찼거나 높은 경우 문제를 해결하는 방법

坏嘻嘻
坏嘻嘻원래의
2018-09-28 14:22:573171검색

이 글에서는 Linux 인스턴스의 대역폭을 설정하고 CPU가 가득 찼는지 아니면 높은지 문제를 해결하는 방법을 소개하고 구체적인 단계를 중점적으로 설명하며, 이 글에서 뭔가를 얻을 수 있기를 바랍니다.

Linux 인스턴스 대역폭 및 CPU가 가득 찼거나 높은 문제 해결

클라우드 서버 ECS를 사용할 때 서비스 속도가 느려지거나 ECS 인스턴스의 연결이 갑자기 끊어지면 서버 대역폭과 CPU가 가득 찼거나 높은지 여부를 고려할 수 있습니다. 미리 경보 작업을 생성하면 대역폭과 CPU가 가득 차거나 높을 때 시스템이 자동으로 경보 알림을 발행합니다. Linux 시스템에서는 다음 단계에 따라 문제를 해결할 수 있습니다.

문제를 찾습니다. 전체 또는 높은 속도로 실행되는 대역폭 및 CPU에 영향을 미치는 특정 프로세스를 찾으십시오.

분석 및 처리. 대역폭과 CPU에 영향을 미치는 프로세스가 Full 또는 High로 실행되고 있는지 확인하고 분류하여 처리합니다.

일반 프로세스의 경우: 프로그램을 최적화하거나 서버 구성을 업그레이드해야 합니다.

비정상 프로세스의 경우: 프로세스를 수동으로 확인하고 종료하거나 타사 보안 도구를 사용하여 확인하고 종료할 수 있습니다.

이 문서의 관련 구성 및 지침은 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

로드 문제의 경우 에코의 첫 번째 줄과 세 번째 줄만 주의하면 됩니다.

상위 명령의 첫 번째 줄에 표시되는 내용은 17:27:13 최대 27일, 3:13, 사용자 1명, 로드 평균: 0.02, 0.03, 0.05이며 이는 시스템의 현재 시간, 현재까지 시스템이 실행되었으며, 현재 시스템에 로그인한 사용자 수와 시스템 부하가 uptime 명령을 직접 실행한 쿼리 결과와 일치합니다.

top 명령의 세 번째 줄에는 현재 CPU 리소스의 전체 사용량이 표시되며, 아래에는 각 프로세스의 리소스 사용량이 표시됩니다.

문자 키 P를 누르면 CPU 사용량을 역순으로 정렬하고 시스템에서 더 높은 CPU를 차지하는 프로세스를 찾을 수 있습니다.

참고: 문자 키 M을 사용하면 시스템 메모리 사용량을 정렬할 수 있습니다. 멀티 코어 CPU가 있는 경우 숫자 키 1을 사용하면 각 코어 CPU의 로드 상태를 표시할 수 있습니다.

ll /proc/PID/exe를 통해 각 프로세스 ID에 해당하는 프로그램 파일을 볼 수 있습니다.

풀 또는 하이로 실행 중인 CPU 분석 및 처리

CPU가 가득 찼거나 높을 때 특정 프로세스 결과를 확인한 후 kswapd0에 대해 비정상적인 프로세스를 종료해야 합니다. 메모리 부족 등 시스템 사양을 업그레이드하거나 프로그램을 최적화해야 합니다.

CPU를 많이 소모하는 프로세스를 직접 종료하려면 top을 사용하세요.

상위 실행 인터페이스에서 해당 비정상 프로세스를 직접 빠르게 종료할 수 있습니다. 단계는 다음과 같습니다.

프로세스를 종료하려면 소문자 k 키를 누르세요.

종료하려는 프로세스의 PID를 입력하세요(상단 출력의 첫 번째 열). 예를 들어, PID 86으로 프로세스를 종료하려면 86을 입력하고 Enter를 누르십시오.

작업이 성공하면 Send pid 86 signal [15/sigterm]과 유사한 프롬프트 메시지가 인터페이스에 나타납니다. Enter를 눌러 확인하세요.

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으로 문의하세요.