É devido ao OpenVZ. Você pode ver os limites aplicados em /proc/user_beancounters
, e há alguma explicação aqui: link
Embora eu não tenha tido problemas de memória em um contêiner, acho que a sugestão é a seguinte:
para começar, definir o tamanho da pilha com ulimit
é bom. Apenas observe que a implicação de que o OpenVZ usa a mesma métrica encontrada na coluna VIRT do topo está errada; o "privvmpages" é que acredito que as páginas virtuais marcadas como graváveis e privadas , são significativamente menores do que todo o espaço de endereçamento de um processo. Há alguma outra desinformação lá também ("Infelizmente ficar sem memória é uma condição de erro que a maioria dos programas não consegue manipular corretamente". - no linux, ficar sem memória é por padrão não um erro condição, portanto, os programas não têm a chance de manipulá-lo corretamente). Mas, provavelmente, vale a pena tentar definir o tamanho da pilha.
A sugestão de Slm parece ser uma boa solução para encontrar os gatos gordos, mas se a sua fatia é como a minha, não há /proc/bc
para trabalhar. Você pode, no entanto, obter a estatística gravável e privada de um processo por meio de pmap -d
, ou examinar números na parte superior.
1 gig pode parecer o suficiente para executar uma JVM, mas há uma complicação: já que a quantidade de memória usada e disponível não é uma figura simples (veja algumas discussões sobre por que aqui ), o total pode ser maior do que a máquina pode realmente fornecer em um determinado momento.