Java 프로세스는 항상 단일 CPU에 바인딩되는 것처럼 보입니다.

Java 프로세스는 항상 단일 CPU에 바인딩되는 것처럼 보입니다.

이것은 약간 혼란 스럽습니다. ESXi 5.5에서 28개의 가상 머신이 실행되고 있으며 각 가상 머신에 6개의 vcpu가 할당되어 있습니다. 이들은 구체적으로 로드되지 않으며 각 Java 프로세스 이외의 다른 프로세스를 실행하지 않습니다. 이들 중 하나를 실행하고 개별 CPU 출력을 표시하면 기본적으로 다음과 같습니다.

top - 21:00:15 up 6 days, 12:52,  1 user,  load average: 0.89, 0.85, 0.82
Tasks: 110 total,   1 running, 108 sleeping,   0 stopped,   1 zombie
Cpu0  :  3.7%us,  0.3%sy,  0.0%ni, 96.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 38.4%us,  3.0%sy,  0.0%ni, 51.9%id,  0.0%wa,  1.3%hi,  5.4%si,  0.0%st
Cpu2  :  2.7%us,  0.3%sy,  0.0%ni, 96.6%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu3  :  3.7%us,  0.7%sy,  0.0%ni, 95.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  3.4%us,  0.3%sy,  0.0%ni, 96.0%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu5  :  4.0%us,  0.7%sy,  0.0%ni, 95.0%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:  12168008k total,  7323476k used,  4844532k free,   405332k buffers
Swap:  4194296k total,        0k used,  4194296k free,  1198540k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
20543 root      18   0 5704m 303m  18m S 64.6  2.6 555:03.29 java
25873 root      15   0 90152 3336 2604 S  0.3  0.0   0:00.02 sshd
25952 root      15   0 12760 1276  944 R  0.3  0.0   0:00.01 top

각 서버에서 Cpu1은 로드를 표시하는 유일한 CPU입니다. 다른 CPU로 절대 이동하지 않습니다. 2주 전에 이 사실을 알았습니다. 이후 모든 것이 다시 시작되었으며 여전히 동일하게 작동합니다. 이 프로세스에는 선호도가 설정되지 않았습니다.

# taskset -p $(pgrep java)
pid 20543's current affinity mask: 3f

다음과 같이 절전 모드가 아닌 상태의 개별 스레드를 관찰하면 다음과 같습니다.

# cd /proc/$(pgrep java)/task
# while true; do awk '($3 != "S") { print "LWPID: " $1 " CPU: " $39}' */stat; sleep 5; echo -; done

그들은 다양한 CPU로 점프하는 것 같습니다.

# cat /etc/redhat-release
CentOS release 5.7 (Final)
# uname -a
Linux ----- 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
# java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
# top --version
        top: procps version 3.2.7

왜 항상 단일 CPU에 나타나는지 아는 사람이 있습니까?

답변1

머신은 실제로 로드를 분산할 필요가 없을 때 하나의 CPU만 깨우도록 선택할 수 있습니다.

모든 프로세스는 유휴 시간이 있는 웨이크업 CPU를 보고 이를 선호합니다.

관련 정보