Eu estou executando uma máquina virtual em um provedor onde você paga por tudo que você usa (CPU, memória, disco IO, largura de banda, etc). Atualmente minha máquina tem 512MB de RAM e 1GB de área de troca.
A versão do kernel é 3.8.0-21 e a distribuição é Ubuntu 13.04, mas suspeito que o kernel possa ser customizado, porque as atualizações do kernel são retidas.
Eu executo alguns cron jobs onde processos Python estão fazendo coisas com um banco de dados PostgreSQL. Ultimamente, os processos em Python foram mortos pelo assassino da OOM.
Eu não preciso de ajuda para resolver o problema real, posso aumentar a memória, reprogramar as tarefas do cron, desativar a supercomprometimento de memória, ajustar as configurações do PostgreŚQL, alterar o funcionamento dos programas em Python, mas primeiro gostaria de sabe exatamente porque isso acontece (para fazer a correção correta). A única coisa é que eu tenho muito livre de swap no momento da matança, mas sem memória física.
Eu tenho o seguinte no log do kernel:
[4003981.650341] select 1 (init), adj 0, size 249, to kill
[4003981.650349] select 609 (rsyslogd), adj 0, size 609, to kill
[4003981.650359] select 17139 (postgres), adj 0, size 635, to kill
[4003981.650361] select 10381 (postgres), adj 0, size 6719, to kill
[4003981.650365] select 14153 (postgres), adj 0, size 7296, to kill
[4003981.650367] select 14159 (postgres), adj 0, size 7300, to kill
[4003981.650370] select 26802 (python3), adj 0, size 70767, to kill
[4003981.650372] send sigkill to 26802 (python3), adj 0, size 70767
Eu corro wmstat
a cada segundo na mesma época (o processo em Python foi morto antes de 12:13:48):
2014-02-01 12:13:43 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
2014-02-01 12:13:43 r b swpd free inact active si so bi bo in cs us sy id wa
2014-02-01 12:13:43 1 0 55 5 216 217 0 0 964 396 386 514 71 10 0 18
2014-02-01 12:13:44 1 1 55 87 185 166 0 0 22304 14536 907 1241 53 9 0 38
2014-02-01 12:13:45 1 0 55 60 190 189 0 0 21768 17344 1216 4581 21 26 0 53
2014-02-01 12:13:46 1 1 57 6 218 214 0 0 22264 4836 1031 3696 22 43 0 35
2014-02-01 12:13:47 2 1 59 4 217 218 0 0 28228 29892 1045 6234 22 34 0 44
2014-02-01 12:13:48 1 2 73 272 97 74 0 0 39436 14372 975 3708 10 38 0 52
2014-02-01 12:13:49 1 0 73 185 173 85 0 0 78400 356 1154 1943 23 33 0 44
2014-02-01 12:13:51 1 1 73 247 132 65 0 0 1936 0 165 188 7 13 69 11
Agora, para a pergunta real: eu vi outras perguntas aqui ( como esta ), onde há um log com mais detalhes sobre a memória (DMA, memória normal, etc). Eu não consigo encontrá-lo em qualquer lugar no meu sistema. É algo que precisa ser ativado ou onde posso encontrá-lo?
A informação que estou procurando é algo assim:
Free pages: 6524kB (0kB HighMem)
Active:20 inactive:23 dirty:0 writeback:0 unstable:0 free:1631 slab:874 mapped:20 pagetables:90
DMA free:6524kB min:1200kB low:1500kB high:1800kB active:80kB inactive:92kB present:16384kB pages_scanned:41 all_unreclaimable? no
lowmem_reserve[]: 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0
HighMem free:0kB min:128kB low:160kB high:192kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0
DMA: 411*4kB 252*8kB 113*16kB 27*32kB 1*64kB 1*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 6524kB
Normal: empty
HighMem: empty
Swap cache: add 24282, delete 24269, find 7705/11790, race 0+0
Free swap = 124768kB
Total swap = 128448kB
Out of Memory: Killed process 453 (smbd).