Já faz um tempo desde que eu tive que ler um log do OOM-killer, mas se bem me lembro, isso
Jun 28 05:06:23 crushftp kernel: Killed process 1491, UID 0, (java) total-vm:9620220kB, anon-rss:3245824kB, file-rss:128kB
significa que java estava usando 9GB de VM quando o OOM-killer disparou na cabeça. Dado que você tem 4GB de núcleo e 4GB de swap, isso parece ser uma coisa razoável de se fazer. Você então escreve
When I understand it correct, the value must be ok and if the process needs more RAM it should be able to get it.
que eu não entendo.
Em primeiro lugar, definir esse valor como 0
não desativa o comprometimento excessivo. Como a Red Hat escreve , configure isso para 0
requer que o
kernel performs heuristic memory overcommit handling by estimating the amount of memory available and failing requests that are blatantly invalid. Unfortunately, since memory is allocated using a heuristic rather than a precise algorithm, this setting can sometimes allow available memory on the system to be overloaded.
Definir como 2
faz o que você parece querer:
The kernel denies requests for memory equal to or larger than the sum of total available swap and the percentage of physical RAM specified in overcommit_ratio. This setting is best if you want a lesser risk of memory overcommitment.
Mas até mesmo desativar o overcommit não garante que um processo sempre consiga mais RAM: somente uma VM infinita garante isso. Enquanto o core + swap é finito, ele pode ser usado - e se você tem um processo que consome toda a VM livre no momento em que o kernel precisa de um pouco mais, então o OOM-killer vai acordar, e, bem, parece o que aconteceu.
Minhas recomendações são:
-
Não execute
java
como root. O ideal é não executá-lo, mas se for necessário, não como raiz; isso dá uma ponderação nos olhos que matam a OOM, o que pode resultar em algo importante ser morto em vez disso. -
Encontre o vazamento de memória em qualquer coisa que esteja usando java.
-
Se você realmente acredita que não tem vazamento de memória, não tem núcleo suficiente; Pônei para um servidor maior. Dê mais swap também.
-
Monitore melhor a pegada de VM do seu java; atire na cabeça se ficar todo inchado.