LINUX.ORG.RU

Любое приложение падает с сообщением «out of memory»

 , ,


0

2

Любое приложение падает с сообщением «out of memory»: chromium вообще дольше минуты не живет, kde-plasma умирает через 1 час работы. emerge так же умирает с такой же ошибкой. В чем может быть дело?

$ ulimit -a 
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited 
pending signals                 (-i) 96052    
max locked memory       (kbytes, -l) 64       
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024     
pipe size            (512 bytes, -p) 8        
POSIX message queues     (bytes, -q) 819200   
real-time priority              (-r) 0        
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 96052
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

$ uname -a
Linux gentoo 3.6.11-gentoo #6 SMP Fri Mar 8 22:41:24 GMT+3 2013 x86_64 Intel(R) Core(TM) i7 CPU X 980 @ 3.33GHz GenuineIntel GNU/Linux
$ free -h
             total       used       free     shared    buffers     cached
Mem:           11G        11G       230M         0B       507M       9.0G
-/+ buffers/cache:       2.0G       9.7G
Swap:           0B         0B         0B

хотя htop показывает, что сейчас используется около 2 гб из 12. Причем сейчас запущен только firefox с 1 вкладкой, opera с 1 вкладкой и терминал с двумя табами.

Как полечить проблему?


Ответ на: комментарий от AoD314

vm.overcommit_memory — отвечает за стратегию overcommit. vm.overcommit_ratio — отвечает за уровень (в процентах) overcommit-а

Стратегии есть такие (см. файл с исходниками ядра mm/mmap.c):

0=OVERCOMMIT_GUESS — эвристический подход к распределению памяти. В нем выделяется столько памяти, сколько хочет процесс. Но в swap/res попадает только те страницы, которые используются этим процессом.

1=OVERCOMMIT_ALWAYS — overcommit памяти есть всегда. Использовать лучше с совсем кривыми приложениями и быть готовым при этому ко всему.

2=OVERCOMMIT_NEVER — без overcommit. В этом случае допустимый объем пространства памяти будет swap+ram*overcommit_ratio/100

$ cat /proc/sys/vm/overcommit_ratio 
50

т.е. В этом случае допустимый объем пространства памяти будет 0+ram*50/100 = ram/2 = 6Гб - что верно.

Что не так?

AoD314 ()
Ответ на: комментарий от AoD314

Если честно, я сам не до конца понимаю эту схему. Это политика выделения памяти, при том если overcommit_memory != 2, то память выделяется приложению даже если ее (памяти) физически нет в наличии, при этом реально память выделяется только когда к ней идет обращение.

У меня overcommit_memory=0, overcommit_ratio=50. Еще видел рекомендацию overcommit_memory=2, overcommit_ratio=100.

В гугле есть много ссылок, вот парочка:
http://make-linux.blogspot.com/2011/01/overcommit-memory.html
http://avz.org.ua/wp/2011/04/24/overcommit-memory/

Попробуй, поиграйся, отпишись по результатам.

Kroz ★★★★★ ()

Спасибо за помощь!

правильный ответ: прописал так в /etc/sysctl.conf и перезагрузился

vm.overcommit_memory = 2
vm.overcommit_ratio = 100
vm.swappiness=1
vm.vfs_cache_pressure = 1000
AoD314 ()
Ответ на: комментарий от AoD314

Некоторые приложения(например) java-утилиты с GUI при overcommit_memory = 2 у меня ВСЕГДА падали сразу после запуска с Out of memory, как бы я ни настраивал overcommit_ratio.

Поэтому на десктопе пользовать такой режим надо с большой осторожностью.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1 )
Ответ на: комментарий от Pinkbyte

Некоторые приложения(например) java-утилиты с GUI при overcommit_memory = 2 у меня ВСЕГДА падали сразу после запуска с Out of memory, как бы я ни настраивал overcommit_ratio.

Надо просто добавить воды^Wсвопа.

Gotf ★★★ ()
Ответ на: комментарий от Gotf

Так вот откуда пошёл тупняк «ядру всё равно нужен своп даже если >9000 памяти» и «серьёзные дяди на серверах юзают своп».

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.