Redis를 실행하는 Ubuntu 서버가 있는데 높은 로드 문제가 발생했습니다.
법의학
가동 시간
# uptime
05:43:53 up 19 min, 1 user, load average: 2.96, 2.07, 1.52
남자 이름
# sar -q
05:24:00 AM LINUX RESTART
05:25:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
05:35:04 AM 0 116 3.41 2.27 1.20 4
Average: 0 116 3.41 2.27 1.20 4
맨 위
맨 위
네트워크 통계
34개의 열린 redis-server
연결:
$ sudo netstat -natp | grep redis-server | wc -l
34
무료
$ free -g
total used free shared buffers cached
Mem: 14 6 8 0 0 2
-/+ buffers/cache: 4 10
Swap: 0 0 0
높은 로드를 유발하고 상태 진입을 기다리는 프로세스를 어떻게 알 수 있나요 Running
? 연결이 너무 많나요?
답변1
iowait가 높기 때문에 예상치 못한 로드 평균이 나타날 수 있습니다. 상단 섹션의 98.7이 wa
이를 보여줍니다. 스크린샷에서 kworker 프로세스도 중단 없는 절전 상태(상단의 D 상태)에 있음을 알 수 있습니다. 이는 프로세스가 디스크 I/O가 완료될 때까지 기다릴 때 발생합니다.
vmstat
실행 큐를 이해할 수 있습니다. 초당 업데이트는 vmstat 1
일반적인 방식으로 수행됩니다 .sar
r 열에는 커널이 loadavg를 계산하는 데 사용하는 실행 가능/실행 중인 프로세스가 표시되고, b 열에는 디스크 I/O를 기다리며 차단된 프로세스(논스톱 절전 모드라고도 함)가 표시됩니다. b의 프로세스는 loadavg 계산에 추가되므로 iowait가 알 수 없는 loadavg를 발생시킵니다.
따라서 어떤 프로세스가 높은 부하 평균을 유발하는지 확인하는 방법에 대한 질문에 대답하려면 iowait의 경우 top
/를 사용하여 ps
D 상태의 프로세스를 찾은 다음 거기에서 문제를 해결하십시오.
답변2
Linux는 대부분의 Unix 계열 운영 체제와 달리 로드 계산을 위한 참조로 CPU를 사용하거나 실행 큐에서 CPU를 기다리는 프로세스를 계산할 뿐만 아니라 실행 중인 프로세스(실제로 스레드 수)를 추가합니다. . 논스톱 상태, 디스크 또는 네트워크 I/O가 완료되기를 기다리고 있습니다. 후자는 실제로 유휴 상태입니다. 즉, CPU를 사용하지 않습니다.
그러면 아마도 (그렇지는 않지만) 높은 부하에 대해 걱정할 필요가 없을 것입니다. 당신이 찾고 있는 프로세스는 아마도 단일 스레드 redis
와 임시 커널 스레드일 것입니다.