내 서버의 상태를 확인하는 방법

내 서버의 상태를 확인하는 방법

top명령을 사용하여 서버의 상태를 확인하는 방법 이나 서버를 변경해야 하는지, 리소스를 추가해야 하는지 알고 싶습니다 . 다음은 top내 서버의 명령 출력 입니다 .

여기에 이미지 설명을 입력하세요.

다음은 몇 가지 다른 사실입니다. 평균 로드 범위는 28.XX에서 77.XX입니다. - CPU %id는 대부분 10.0에서 22.0 사이이며 때로는 30.0으로 떨어지는 경우도 있습니다. - 서버는 가상 머신에서 실행됩니다. - 가상 머신은 Intel(R) Xeon(R) CPU E5-2403 0 @ 1.80GHz, 4 코어가 탑재된 서버에 설치되어 있습니다. - 웹 애플리케이션, 데이터베이스 서비스, memcached, 웹 서버 및 기타 관련 서버 애플리케이션이 오랫동안 실행되었습니다. 주. - Presence.py 서비스는 작업량이 가장 많은 서비스로 현재 703개 노드의 존재 여부를 확인하고 있습니다.

시스템에 RAM을 추가할 필요는 없다고 말하고 싶지만 CPU가 압도당하고 있는 것 같습니다. 여전히 100~200개의 노드를 추가해야 하므로 서버가 이를 처리할 수 없을 것 같습니다. 내가 맞나요?

편집: 존재.py 배경

Presence Service(presence.py)는 (코어 수의 2배) 프로세스, 마스터 프로세스 및 (코어 수의 2배 - 1) 작업자 프로세스에서 실행되는 독점 애플리케이션입니다. 등록된 각 노드에 대해 작업자 프로세스 중 하나에 스레드가 생성되므로 700개의 노드가 있으면 각 작업자 프로세스는 약 100개의 스레드를 실행합니다. 각 스레드는 텔넷이나 HTTP를 통해 초당 한 번씩 해당 노드의 상태를 확인하므로 각 프로세스의 로드를 상상할 수 있습니다.이는 각 스레드가 네트워크 I/O를 대기하거나 대기하는 데 대부분의 시간을 소비한다는 의미입니다..

Presence 서비스는 350개 노드의 로드로 시작해서 잘 돌아가고 있었는데, 한동안 로드를 늘리기 시작하고 600개 노드를 초과하면서 조금 느리게 돌아가기 시작했습니다. 예를 들어 다음 명령을 실행하면 curl www.google.com실행하는 데 몇 초가 걸립니다.

답변1

존재.py를 보다 가벼운 솔루션으로 바꾸십시오. 그것은 마치

cat config.txt | while read C; do
    C=($C)
    nmap -p ${C[1]} ${C[0]} | grep open || mail -s "Warning; port ${C[1]} on server ${C[0]} is unreachable" ${C[2]} < /dev/null &
done;

crontab유사한 구성 의 견적

echo -e "127.0.0.1\t22\[email protected]" > config.txt

포트를 확인하기 위해 상당한 CPU를 사용할 이유가 없습니다. 이는 엄격하게 IO가 제한된 작업입니다. (CPU 시간이 user점점 더 낮아지는 것을 볼 수 있습니다 wait.)

이 Bash 예제는 무거운 솔루션(재사용 불가능)으로 간주됩니다. C에서 코딩하기가 정말 쉽기를 원한다면... Python이 객체 재활용에 실패하거나 다른 원인으로 인해 불필요한 작업을 감독할 수 있습니다. 비효율적인 코드에 더 많은 리소스를 투자하는 것은 가능하지만 단순히 비효율성을 수정하는 것이 더 저렴한 경우가 많습니다. 당신은 또한 원할 수도 있습니다네트워크 스택 조정.

답변2

이는 전체 CPU의 약 80%가 사용되는 매우 높은 로드 평균입니다. 바쁜 사용자 영역, 상당히 바쁜 커널, 심지어 일부 소프트웨어 인터럽트까지 모두 여기에 표시됩니다.

나는 정말로 당신이 부하에 도움이 될 비동기 네트워크 호출을 하고 있기를 바랍니다. 그러나 그것은 프로그램에 관한 것이 아니라 시스템에 관한 것입니다. 말씀하신대로 CPU가 더 필요하다고 말하고 싶습니다. 또한 스레드 수가 얼마나 많은지 확인하십시오. 스레드가 많고 모두 CPU를 놓고 경쟁하는 경우 컨텍스트 전환이 발생할 수 있습니다. 때로는 스레드 수가 적을수록 더 좋습니다!

관련 정보