LINUX.ORG.RU
ФорумAdmin

fork: Cannot allocate memory

 


0

1

Что творится с серваком? Несколько лет работал а тут такое. Раза с 20 зашел по ssh на все команды fork: Cannot allocate memory, но если долго пытаться то команды выполняются. Свободной памяти много. В чем проблема? Может быть в физическом повреждении RAM?

-su-4.2# free 
-su: fork: Cannot allocate memory
-su-4.2# free 
             total       used       free     shared    buffers     cached
Mem:      32878740   10297480   22581260          0      52108    6052000
-/+ buffers/cache:    4193372   28685368
Swap:     16768892          0   16768892
-su-4.2# free -m
-su: fork: Cannot allocate memory

OS, ядро, dmesg, сколько процессов ? Может баг в ядре который ребутом полечится

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

3.2.0 - както стремно (уже 84 багфикса было для 3.2 ветки).

А что в /proc/slabinfo ? И сколько всего потоков ?

zaz ★★★★
()

у тебя что-то из лимитных вещей закончилось. Возможно дескрипторы или что-то подобное.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Deleted
cat /proc/sys/vm/overcommit_memory
0

cat /proc/meminfo
MemTotal:       32878740 kB
MemFree:        22344460 kB
Buffers:           59612 kB
Cached:          6190060 kB
SwapCached:            0 kB
Active:          7434060 kB
Inactive:        2468708 kB
Active(anon):    3653680 kB
Inactive(anon):      216 kB
Active(file):    3780380 kB
Inactive(file):  2468492 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      16768892 kB
SwapFree:       16768892 kB
Dirty:              1056 kB
Writeback:             0 kB
AnonPages:       3653124 kB
Mapped:            37816 kB
Shmem:               776 kB
Slab:             207824 kB
SReclaimable:      64052 kB
SUnreclaim:       143772 kB
KernelStack:      260312 kB
PageTables:        81440 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    33208260 kB
Committed_AS:   38256032 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      133824 kB
VmallocChunk:   34359604315 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       57344 kB
DirectMap2M:     2971648 kB
DirectMap1G:    30408704 kB
Spinel
() автор топика
Ответ на: комментарий от Pinkbyte
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) 256759
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) 256759
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Spinel
() автор топика
Ответ на: комментарий от Spinel

Хм, тоже вроде никакого криминала(у меня например, некоторые параметры даже ниже по дефолту). Ну и наконец выхлоп ps aux на какой-нибудь pastebin бы не помешал

Update: вот тут чуть подробнее расписали возможные проблемы

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Spinel
CommitLimit:    33 208 260 kB
Committed_AS:   38 256 032 kB

Ищите процесс (процессы) которые запросили большое количество RAM (можно в top Shift+M и смотреть у кого большой VIRT)

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

Вообще не интересно самый жирный это

ps --sort -rss  -eo rss,vsz,pid
  RSS    VSZ   PID
2607036 36728164 21776
577652 1102564 24494
144836 544060 2921
101856 1521132 21755
67732 2613624 25743
11392 162992  2307
 9216 163452  4261

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

И кто у нас 21776? Чинится ли всё, если его прибить?

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

Да действительно прибил 21776 и все наладилось. Но вот что странно запросил он 35.0g а использовал всего 2.5g. Притом своп пустой на запросы памяти сыпется Cannot allocate memory. Почему?

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

top - 21:32:03 up 5:36, 2 users, load average: 0.14, 0.19, 0.18
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
%Cpu(s): 13.5 us, 0.8 sy, 0.0 ni, 85.3 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 32878740 total, 10601464 used, 22277276 free, 62572 buffers
KiB Swap: 16768892 total, 0 used, 16768892 free, 6246996 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                                                                       
21776 xxxxxxxx  20   0 35.0g 2.5g  14m S  91.9  7.9  63:55.98 xxxx                                                                                                                                          
24494 xxxxxxxx  20   0 1076m 564m  14m S   0.7  1.8  12:18.24 xxxx                                                                                                                                          
 2921 xxxxx     20   0  531m 141m 8036 S  19.4  0.4  25:01.12 xxxxxx                                                                                                                                        
21755 xxxxxxxx  20   0 1485m 100m  12m S   0.0  0.3   0:19.52 xxxx                                                                                                                                          
25743 xxxxxxxx  20   0 2552m  66m  13m S   0.3  0.2   0:31.57 xxxx                                                                                                                                          
 2307 xxxx      20   0  159m  11m 4988 S   0.0  0.0   0:01.44 xxxxxxx                 

Spinel
() автор топика
Ответ на: комментарий от Spinel
COMMAND                                                                                                                                       
xxxx

Это ты шифруешься так, что ли? Я понимаю там логины пользователей еще скрывать, но что у тебя такого сверхсекретного в именах процессов? :-)

И еще, ты так и не ответил что именно за процесс был под pid 21776.

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

Не дай бохъ узнают, шо java (подкодит по кол-ву символов) крутит. ;)

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

Вариантов тут немного: либо фиксить поведение процесса(патчить, писать багрепорты и/или накатывать новую версию), либо переключать overcommit в режим 2.

ОСТОРОЖНО: неправильные настройки overcommit могут к чертям сломать тебе систему, пока не откатишь в зад. Например, у меня при дефолтных 50% overcommit_ratio на десктопе с 4G RAM напрочь отказывались запускаться ЛЮБЫЕ приложения на java(даже hello world).

Update: гы, как в воду глядел, начал писать коммент до того как увидел инфу про java :)

Крути настройки GC в java, ну или overcommit, но осторожно и желательно с локальным доступом(хотя SSH по идее прибивается OOM-Killer-ом в сааамую последнюю очередь, так что...)

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

С лимитами там печально всё ЕМНИП, нормально через /etc/security/limits.conf потребление памяти на пользователя не зарезать, тут нужны cgroups. На самом деле ничего страшного - у нас так на работе ограничена память, которую может сожрать пых и апач на серваке веб-разработчиков - любят они её съедать с концами :-)

Причем, т.к. рожается немаленькое количество процессов - OOM Killer тупо не успевает всё это прибить и система стоит раком. Ну точнее стояла, пока не ворвались мы с напарником и не вкрутили cgroups c потолком на 80% памяти сервера

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

Да, это лучше делать через cgroups

Пример для CentOS. На свой дистр я надеюсь нагуглишь сам.

Что прикольно - можно ограничить по памяти все процессы с определенным именем, не важно от какого пользователя они запущены. Очень нужная штука в случае web-сервера, где virtualhost-ы раскиданы по разным UID

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

Для будующих поколений: похожие проблемы в BSD решаются элементарно через login.conf.

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

Потомучто у вас стоит лимит в 32G на выделеную память, это настраивается через параметры

/proc/sys/vm/overcommit_memory - режим лимита
/proc/sys/vm/overcommit_ratio - лимит в % от физической RAM (+ свап)

Можно либо поднять /proc/sys/vm/overcommit_ratio (скажем до 200%) либо установить 1 режим (echo 1 > /proc/sys/vm/overcommit_ratio) и отключить лимитирование по резервированию вообще

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

java

Тогда наверное стоит параметрами самой JVM ограничить размер RAM чтобы оставалось пару G для системы.

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

То-то и он что для java стоит -Xms1024M -Xmx2048M

Это гдето в настройках или видно в /proc/<pid>/cmdline ? И какой размер стека (-Xss) и сколько потоков (ls /proc/<pid>/status | grep Thread) ?

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

Xss по дефолту вроде 2M а 23690 потоков это уже 46G для стека

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