CPU 사용량을 확인하고 80%보다 높으면 명령을 실행합니다.

CPU 사용량을 확인하고 80%보다 높으면 명령을 실행합니다.

내 VPS가 여러 번 해킹당했고 해커가 여기에 CPU 채굴기를 설치했습니다. 마이너가 감지되고 12시간 이내에 응답하지 않으면 호스팅 제공업체에서 VPS를 종료합니다. 하지만 토요일 밤 21시에 알림을 보낼 수 있고 :) 일요일 오전 9시에 서버를 종료할 수 있습니다.

그래서 CPU 사용량과 채굴자가 항상 쓰는 블록 폴더를 모니터링하고 싶습니다.

나는 Linux에 익숙하지 않으므로 이와 같은 스크립트를 제안하십시오.

  1. CPU 사용량을 확인하고 80%보다 높으면(예를 들어) 조치를 취하십시오.
  2. 제 경우에는 설치 폴더에서 모든 항목을 제거하고 읽기 전용으로 만들었습니다.

실제로 항목 1을 구현하는 방법을 모르겠습니다.

답변1

비슷한 문제가 있어서 bash이 짧은 스크립트를 완성했습니다. 지난 15분 동안의 로드 평균을 계산하고 있습니다. 다른 시간 범위를 원할 경우 이를 변경해야 합니다(지난 5분 동안의 로드 평균을 확인하려면 로 변경 awk) print $1.
이는 상대적인 CPU 사용량을 알려줍니다.

#!/bin/bash
cores=$(nproc) 
load=$(awk '{print $3}'< /proc/loadavg)
echo | awk -v c="${cores}" -v l="${load}" '{print "relative load is " l*100/c "%"}'

Ubuntu 및 Centos에서 실행해야 합니다.

로드가 80%를 초과하는지 확인하고 "뭔가를 수행"하려면 다음 스크립트에 추가해야 합니다.

usage=$(echo | awk -v c="${cores}" -v l="${load}" '{print l*100/c}' | awk -F. '{print $1}')
if [[ ${usage} -ge 80 ]]; then
    echo "delete all from install folder and make it read only"
fi

답변2

CPU 사용량을 확인하고 80%보다 높으면(예를 들어) 조치를 취하십시오.

최신 CPU에는 다중 코어가 있으며 각 코어는 일반적으로 다중 스레드를 지원합니다. 또한 코어에는 종종 가변 클럭 속도가 있습니다. 그렇다면 CPU 로드를 계산하는 방법을 정의하는 것은 그리 간단하지 않습니다. 단일 vCPU는 특정 시간에 100% 유휴 상태이거나 100% 사용 중일 수 있다는 점은 말할 것도 없습니다. CPU가 일시적으로 80%까지 사용되는 상황은 없습니다.

시간 경과에 따른 vCPU당 평균 로드(mpstat 제공) 또는 결합된 모든 vCPU의 평균(vmstat)을 얻을 수 있습니다.

완전히 CPU 바인딩되어 있더라도 적대적인 CPU 소비자가 단일 스레드인 경우 후자의 경우 다른 vCPU가 유휴 상태일 수 있으므로 눈에 띄게 나타나지 않을 수 있습니다.

다중 스레드 및 CPU 바인딩인 경우 두 명령 모두 이를 감지하지만 컴퓨터를 로드하는 합법적인 응용 프로그램이나 데몬이 아닌지 확인해야 합니다.

또 다른 유용한 지표는 vCPU 리소스를 사용하고 경쟁하는 스레드 수를 측정하는 CPU 경합에서 비롯됩니다. 이것이 로드 평균이 표시하려는 것입니다. 불행하게도 Linux에서는 로드 평균이 스레드 무정전 상태를 CPU 로드로 간주하지만 실제로는 CPU가 유휴 상태이고 다른 작업을 수행할 수 있으므로 이 요소에 주의를 기울여 로드 평균은 높으나 실제 경합이 발생하는 상황을 식별해야 합니다. 잠재력이 낮은 상황을 사용하십시오.

마지막으로 실행 대기열이 매우 높지만 시간이 매우 제한된 상황이 있을 수 있습니다. 실행 큐 값을 얻기 위해 샘플링을 사용하는 로드 평균 계산이 이 피크 순간에 숫자를 취하는 경우 로드 평균은 몇 분 또는 수십 분 동안 심각하게 왜곡됩니다.

관련 정보