Anteriormente, eu tinha um servidor de 4GB de RAM com o Linode. Várias vezes, eu fiz o comando "free -m" para verificar a memória disponível. Na maioria das vezes, ele mostrava menos de 200 Mb livres. Os processos principais que estou executando continuamente no servidor são:
1) Servidor Apache atendendo cerca de 1.000 acessos por dia.
2) Servidor Tomcat, menos de 100 acessos
3) Solr
4) Três programas Java que não devem consumir mais de 2 GB de RAM.
(Nos processos Java, não estou usando nenhum parâmetro -Xmx)
Então, mudei para outro host dedicado. Mas aqui estou recebendo o mesmo tipo de problema. Meu solto sendo morto se eu tentar executar qualquer programa Java adicional (que não precisa de mais 512 Mb). Mesmo, às vezes, ele é automaticamente "morto", talvez quando outros processos Java estão trabalhando muito.
Aqui está a saída que recebi em /var/log/kern.log quando tentei saber o motivo pelo qual o solr é "morto" sem nenhum motivo.
Dec 14 20:25:03 xyzserver kernel: [4680101.245182] Out of memory: Kill process 7481 (java) score 184 or sacrifice child
Dec 14 20:25:03 xyzserver kernel: [4680101.246851] Killed process 7481 (java) total-vm:22841896kB, anon-rss:987160kB, file-rss:0kB
Não sei por que sempre recebo menos de 200 MB como memória livre.
Saída gratuita -m:
root @ xyzserver: / home # livre -m
total used free shared buffers cached
Mem: 7963 7805 157 24 1 57
-/+ buffers/cache: 7746 216
Swap: 3813 2420 1393
python ps_mem.py output
root@xyzserver:/home# python ps_mem.py
Private + Shared = RAM used Program
4.0 KiB + 9.5 KiB = 13.5 KiB acpid
4.0 KiB + 20.5 KiB = 24.5 KiB upstart-socket-bridge
4.0 KiB + 21.0 KiB = 25.0 KiB upstart-file-bridge
4.0 KiB + 24.5 KiB = 28.5 KiB atd
4.0 KiB + 25.0 KiB = 29.0 KiB upstart-udev-bridge
4.0 KiB + 27.5 KiB = 31.5 KiB vsftpd
4.0 KiB + 37.5 KiB = 41.5 KiB init
4.0 KiB + 44.5 KiB = 48.5 KiB dbus-daemon
4.0 KiB + 47.5 KiB = 51.5 KiB systemd-logind
4.0 KiB + 51.5 KiB = 55.5 KiB systemd-udevd
24.0 KiB + 117.0 KiB = 141.0 KiB getty (6)
104.0 KiB + 48.5 KiB = 152.5 KiB flock (5)
120.0 KiB + 49.5 KiB = 169.5 KiB sh (5)
156.0 KiB + 41.0 KiB = 197.0 KiB irqbalance
264.0 KiB + 183.5 KiB = 447.5 KiB sshd (2)
480.0 KiB + 46.5 KiB = 526.5 KiB rsyslogd
524.0 KiB + 123.0 KiB = 647.0 KiB screen (4)
384.0 KiB + 369.0 KiB = 753.0 KiB cron (6)
840.0 KiB + 123.0 KiB = 963.0 KiB bash (5)
73.0 MiB + 138.0 KiB = 73.2 MiB mysqld
58.1 MiB + 27.4 MiB = 85.5 MiB apache2 (31)
3.2 GiB + 3.0 MiB = 3.2 GiB java (7)
---------------------------------
3.4 GiB
=================================
cat / proc / meminfo
root@xyzserver:/home# cat /proc/meminfo
MemTotal: 8154636 kB
MemFree: 180992 kB
Buffers: 692 kB
Cached: 36560 kB
SwapCached: 142536 kB
Active: 2775768 kB
Inactive: 1070008 kB
Active(anon): 2765376 kB
Inactive(anon): 1059320 kB
Active(file): 10392 kB
Inactive(file): 10688 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 3905532 kB
SwapFree: 613012 kB
Dirty: 0 kB
Writeback: 1916 kB
AnonPages: 3667288 kB
Mapped: 28880 kB
Shmem: 15796 kB
Slab: 59552 kB
SReclaimable: 22052 kB
SUnreclaim: 37500 kB
KernelStack: 3592 kB
PageTables: 42956 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 7982848 kB
Committed_AS: 8087572 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 281716 kB
VmallocChunk: 34359421140 kB
HardwareCorrupted: 0 kB
AnonHugePages: 14336 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 55572 kB
DirectMap2M: 8310784 kB
Como eu posso ver, o ps_mem.py está mostrando menos que 4Gb. Por que é free -m mostrando toda a memória consumida. Como eu controlo este comportamento? Aparentemente, não estou utilizando toda a memória. Como eu posso fazer isso ? Preciso trocar a memória swap?