나는 많은 기계들/노드들이있는 동시 시스템을 가지고 있습니다. 각 기계는 여러 가지 JVM을 실행하여 다른 작업을 수행합니다. 이는 각 계층이 여러 시스템에서 실행되는 많은 JVM으로 구성되는 "계층화 된"구조입니다. 기본적으로 최상위 계층 JVM은 파일을 통해 외부로부터 입력을 받아 입력을 파싱하고 레이어 2의 "저장소"에 대한 여러 개의 작은 레코드로 보냅니다. 레이어 2는 실제로 데이터 자체를 유지하지 않지만 HBase 및 Solr 레이어 3에 실제로 지속되며 HBase는 지속성을 위해 레이어 4 (HDFS)로 전송하기 때문에 실제로 자체를 유지하지 않습니다.리눅스에서 java 프로세스가 많은 iowait가 있습니다.
대부분의 계층 간 통신은 동기화되어 있으므로 하위 계층이 완료 될 때까지 기다리는 스레드가 많습니다. 하지만 기다리는 스레드가 "무료"CPU 사용량이 될 것으로 기대합니다.
나는 80-90 % iowait와 sys/usr CPU 사용량이 10-20 % 밖에되지 않는 매우 높은 iowait (맨 위 %)를 볼 수 있습니다. 시스템이 고갈 된 것 같습니다 - ssh를 통해 로그인하는 속도가 느려지고 명령에 응답하는 속도가 느려짐
하위 계층을 완료하기 위해 대기하는 모든 JVM 스레드가이 문제를 일으킬 수 있습니다. 응답 (소켓)을 기다리는 "자유로운"것이 아닌가? 다른 레이어가 블로킹 또는 비 블로킹 (NIO)을 사용하는지 여부와 관련하여 중요합니까? 정확히 어떤 상황에서 리눅스는 무엇인가를 iowait로 간주합니까? 머신의 모든 JVM에있는 모든 스레드가 대기중인 상황에있는 경우 (그 동안 의미있는 작업을 수행 할 다른 스레드가 없으므로 계산)? 또는 실제 처리를 위해 CPU를 사용할 준비가 된 다른 프로세스가 있더라도 대기중인 스레드는 % wa로 계산됩니까?
나는 그것이 어떻게 작동하는지,이 높은 % wa를 해석하는 방법에 대한 철저한 설명을 원합니다. 처음에는 모든 스레드가 대기하고 있지만 실제로는 더 많은 공간을 확보 할 수 있기 때문에 더 많은 처리량을 얻으려는 스레드의 수를 늘리려고했지만 % was으로 계산했다고 추측했습니다. . 그래서 그것은 진짜 문제입니다. 꼭 봐야하는 "시각적 인"문제가 아닙니다.
아래 출력은 HBase 및 HDFS 만 실행중인 컴퓨터에서 가져온 것입니다. 그것은 IO 리눅스에서 대기
--- jps ---
19498 DataNode
19690 HRegionServer
19327 SecondaryNameNode
---- typical top -------
top - 11:13:21 up 14 days, 18:20, 1 user, load average: 4.83, 4.50, 4.25
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 14.1%us, 4.3%sy, 0.0%ni, 5.4%id, 74.8%wa, 0.0%hi, 1.3%si, 0.0%st
Mem: 7133800k total, 7099632k used, 34168k free, 55540k buffers
Swap: 487416k total, 248k used, 487168k free, 2076804k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
COMMAND
19690 hbase 20 0 4629m 4.2g 9244 S 51 61.7 194:08.84 java
19498 hdfs 20 0 1030m 116m 9076 S 16 1.7 75:29.26 java
---- iostat -kd 1 ----
[email protected]:~# iostat -kd 1
Linux 2.6.32-29-server (edrxen1-2) 02/22/2012 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 3.53 3.36 15.66 4279502 19973226
dm-0 319.44 6959.14 422.37 8876213913 538720280
dm-1 0.00 0.00 0.00 912 624
xvdb 229.03 6955.81 406.71 8871957888 518747772
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.00 0.00 0.00 0 0
dm-0 122.00 3852.00 0.00 3852 0
dm-1 0.00 0.00 0.00 0 0
xvdb 105.00 3252.00 0.00 3252 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.00 0.00 0.00 0 0
dm-0 57.00 1712.00 0.00 1712 0
dm-1 0.00 0.00 0.00 0 0
xvdb 78.00 2428.00 0.00 2428 0
--- iostat -x ---
Linux 2.6.32-29-server (edrxen1-2) 02/22/2012 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8.06 0.00 3.29 65.14 0.08 23.43
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
xvda 0.00 0.74 0.35 3.18 6.72 31.32 10.78 0.11 30.28 6.24 2.20
dm-0 0.00 0.00 213.15 106.59 13866.95 852.73 46.04 1.29 14.41 2.83 90.58
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 5.78 1.12 0.00
xvdb 0.07 86.97 212.73 15.69 13860.27 821.42 64.27 2.44 25.21 3.96 90.47
--- free -o ----
total used free shared buffers cached
Mem: 7133800 7099452 34348 0 55612 2082364
Swap: 487416 248 487168
내가 여기 저기 비슷한 질문의 다양성을 볼 수 있지만에 Serverfault에이 하나 WRT 하드웨어 오류를 시도 할 몇 가지 사항이 있습니다 http://serverfault.com/questions/83778/finding-the-root- 100-iowait-in-linux의 원인 다음은 같은 줄에있는 또 다른 설명입니다. 즉, 문제가있는 다른 디버깅과 함께 오류 조건이있을 수 있습니다. http://www.articledashboard.com/Article/Linux -and-High-IO-Wait/959842 –
여러 물리적 시스템에서이를 볼 수 있다고 가정하면 생각한 오류 조건은 계속 발생하지 않지만 이러한 도구의 도구는 기다려.그런 말로, 나는 누군가가 당신의 질문의 일부인 "어떻게 작동하는지에 대한 철저한 설명"에 응답하는 것에 매우 관심이 있습니다. –
상단에 상태 열이 있습니다. 하나의 상자에서 스레드를 볼 때 무엇이 표시됩니까? 'top '출력을 제공 할 수 있습니까? 'iostat -kd 1'의 결과는 무엇입니까? 'free -o' 결과? – ingyhere