Saya menjalankan program java saya pada mesin 12 core 24 thread. Mereka memiliki beberapa proses yang berjalan secara bersamaan. Tampaknya saya melakukan terlalu banyak proses sehingga seluruh tugas membuat mesin sangat lambat.
Inilah informasi teratas
Tasks: 556 total, 2 running, 554 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.4%sy, 0.0%ni, 63.2%id, 36.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16295248k total, 16169560k used, 125688k free, 3300k buffers
Swap: 18530296k total, 10867972k used, 7662324k free, 46188k cached
Tampaknya proses saya berorientasi pada konsumsi memori sehingga hampir semua memori digunakan oleh mereka. Dalam informasi teratas, apa yang saya tidak mengerti adalah mengapa hanya 2 tugas yang berjalan alih-alih 23 (saya telah mengirim 23 proses).
free -g
total used free shared buffers cached
Mem: 15 15 0 0 0 0
-/+ buffers/cache: 15 0
Swap: 17 10 7
Tampaknya semua memori digunakan dan ditukar membuat mesin melambat.
ps -e -o pid,%cpu,%mem,vsz,rss,comm= --sort=vsz
29707 5.6 4.2 6268732 685660 java
29712 5.2 3.9 6268732 647352 java
...
30269 3.2 4.3 6268732 704676 java
30334 4.8 4.2 6268732 689544 java
Ada 23 proses java tersebut. Menjumlahkan semua% cpu, sangat mendekati 100%. Tetapi informasi teratas menunjukkan bahwa CPU tidak sibuk.
Cpu(s): 0.1%us, 0.4%sy, 0.0%ni, 63.2%id, 36.3%wa, 0.0%hi, 0.0%si, 0.0%st
Saya googled berapa ukuran vsz dan rss tetapi tidak mengetahuinya. Saya berasumsi bahwa unit ini dalam kilo byte. Menonton vsz maka proses java menggunakan 6268732kb * 23 = 144.180.836 = ~ 144gb, yang tampaknya tidak mungkin untuk dimasukkan ke dalam RAM karena itu jauh melebihi RAM saya (16gb), jadi hanya 700000kb * 23 = ~ 16gb yang dimasukkan ke dalam memori (dengan info rss, yang merupakan bagian dari penyimpanan data dalam RAM). Karena seringnya pertukaran dan pengalihan konteks membuat sistem melambat.
Saya tidak tahu kesimpulan saya benar atau tidak. Tolong beri saya saran dan bagaimana saya bisa memperbaiki masalah.
Tambahkan detail lebih lanjut:
vmstat -a -S M
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
2 29 16792 124 2105 13152 0 0 29 23 2 0 1 0 95 4 0
Saya tidak tahu bagaimana cara menafsirkan data vmstat. Agak aneh karena swpd: jumlah memori virtual yang digunakan terlihat tinggi sementara si dan 0.
vmstat
untuk melihat kesalahan halaman memori virtual aktual (si
danso
). Gunakanvmstat 1
untuk menunjukkannya secara terus menerus dalam interval kedua.vmstat
juga menunjukkan aktivitas IO. Gunakaniotop
untuk pemantauan aktivitas IO per proses yang lebih rinci.