JVM зависает с ожиданием 100 IO на Ubuntu Maverick (экземпляр AWS EC2 xlarge)
Иметь экземпляр xlarge в AWS с 9 Tomcats с кучей от 256M до 4G. В Ubuntu 10.04 коробка спорадически зависает на несколько часов с огромной очередью выполнения (30-40) и ничего на процессоре, затем восстанавливается. Подозревал GC, но упрекал как с, так и без CMS GC.
После обновления до 10.10 машина переходит в режим ожидания на 100% через несколько часов после запуска, снова без каких-либо процессов на процессоре. Вот вывод сверху:
top - 18:33:44 up 3:11, 2 users, load average: 26.99, 26.80, 25.82
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 0.0%id,100.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 15373736k total, 15174780k used, 198956k free, 51288k buffers
Swap: 0k total, 0k used, 0k free, 6208956k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5910 tomcat6 20 0 746m 361m 9872 S 0 2.4 2:01.32 java
10147 tomcat6 20 0 919m 173m 9.8m S 0 1.2 0:22.60 java
12328 ubuntu 20 0 19276 1320 968 R 0 0.0 0:01.41 top
1 root 20 0 23864 2012 1300 S 0 0.0 0:00.38 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
...
Ничего полезного в журнале GC (в больших случаях, с MarkSweep, основной GC происходит каждые 5 минут и занимает ~4 с, инкрементное завершение в.1 - .2 с, много свободной памяти во всех поколениях).
Вот вывод dstat:
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
5 1 51 43 0 0| 63k 512k| 0 0 | 0 0 | 435 401
0 0 0 100 0 0| 0 0 | 52B 834B| 0 0 | 185 315
0 0 0 100 0 0| 0 0 |4997B 14k| 0 0 | 247 360
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 146 318
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 149 314
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 145 318
0 0 0 100 0 0| 0 0 |4997B 14k| 0 0 | 227 345
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 158 325
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 160 306
0 0 0 100 0 0| 0 0 | 52B 354B| 0 0 | 148 319
0 0 0 100 0 0| 0 0 |4619B 14k| 0 0 | 224 353
В то время, когда ожидание начало расти, это было в конце загрузки / анализа множества больших файлов из s3 и записи их локально на диск (хранилище экземпляров). Дамп потока (на jconsole, не может убить -3 на коробке - зависает), показывает один поток, заблокированный при записи на диск.
Я потерян. Какой камень повернуть дальше? Что здесь может происходить?