Estou executando meu programa java em uma máquina de thread de 12 núcleos 24. Eles têm vários processos que estão sendo executados simultaneamente. Parece que eu realizei muitos processos para que todas as tarefas tornassem a máquina muito lenta.
Aqui é a informação de topo
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
Parece que meus processos são orientados para o consumo de memória, de modo que quase toda a memória foi usada por eles. Na parte superior da informação, o que eu não entendo é por que apenas duas tarefas estão sendo executadas, em vez de 23 (eu despachei 23 processos).
free -g
total used free shared buffers cached
Mem: 15 15 0 0 0 0
-/+ buffers/cache: 15 0
Swap: 17 10 7
Parece que toda a memória foi usada e foi trocando a máquina lenta.
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
Existem 23 desses processos java. Somando todo o% cpu, é muito próximo de 100%. Mas as principais informações indicam que a CPU não está ocupada.
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
Eu pesquisei o tamanho de vsz e rss mas não descobri. Eu suponho que a unidade esteja no byte do quilo. Observando o vsz então os processos java estão usando 6268732kb * 23 = 144,180,836 = ~ 144gb, o que parece ser impossível colocar na RAM porque é muito mais que minha RAM (16gb), então apenas 700000kb * 23 = ~ 16gb foram colocados na memória (com a informação rss, que é a parte do armazenamento de dados na RAM). Por causa do frequente troca e troca de contexto, o sistema ficava lento.
Não sei se minha conclusão está correta ou não. Por favor, me dê alguns conselhos e como posso resolver o problema.
Adicione mais detalhes:
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
Eu não sei como devo interpretar os dados do vmstat. É um pouco estranho porque swpd: a quantidade de memória virtual usada parece alta enquanto si e so são 0.
vmstat
para ver as falhas reais da página de memória virtual (si
eso
). Usarvmstat 1
para mostrá-lo continuamente em um segundo intervalo.vmstat
também mostra a atividade de IO. Usariotop
para monitoramento de atividade de IO por processo mais detalhado.