3

Я разрабатываю ПО для встроенной Linux, и я страдаю от зависания системы, потому что время от времени появляется OOM Killer. Прежде чем выйти за рамки, я хотел бы решить некоторые запутанные проблемы, связанные с тем, как ядро ​​Linux выделяет динамическую память, предполагая, что/proc/sys/vm/overcommit_memory имеет 0 и/proc/sys/vm/min_free_kbytes имеет 712 и не имеет подкачки.Сведения о переполнении памяти Linux

Предположив встроенный Linux в настоящее время доступной физическая памяти 5 МБ (5 МБ свободной памяти и там не может использоваться в кэше или буферная память), если я пишу этот кусок кода:

..... 
#define MEGABYTE 1024*1024 
..... 
..... 
void *ptr = NULL; 
ptr = (void *) malloc(6*MEGABYTE); //Preserving 6MB 
if (!prt) 
    exit(1); 
memset(ptr, 1, MEGABYTE); 
..... 

Я хотел бы знать, если когда memset-вызов выполняется, ядро ​​попытается выделить в поле физической памяти ~ 6 МБ или ~ 1 МБ (или min_free_kbytes multiple).

В настоящее время на моем встроенном устройстве имеется около 9 МБ, в котором содержится 32 МБ ОЗУ. Я проверить это делает

# echo 3 > /proc/sys/vm/drop_caches 
# free 
      total   used   free  shared  buffers 
Mem:  23732  14184   9548   0   220 
Swap:   0   0   0 
Total:  23732  14184   9548 

Забыв последний кусок кода C, я хотел бы знать, если его возможно, что ОАЯ убийца появляется, когда, например, свободная память о> 6MB. Я хочу знать, если система из памяти, когда оот появляется, так что я думаю, что у меня есть два варианта:

  • См VmRSS записи в/Proc/PID/статус подозрительного процесса.

  • Set/proc/sys/vm/overcommit_memory = 2 и/proc/sys/vm/overcommit_memory = 75 и посмотреть, есть ли какой-либо процесс, требующий больше физической памяти.

+0

Ваш вопрос неоднозначен, потому что непонятно, что вы подразумеваете под «распределением». Ядро будет * резервировать * 6 МБ, но он еще ничего не выделяет, потому что процесс может никогда не получить доступ к памяти. –

+0

Но когда выполняется memset (ptr, 1, MEGABYTE), процесс записывает память, не так ли? – MABC

+0

Да, и тогда ОС должна фактически выделить некоторые. –

ответ

7

Я думаю, вы можете прочитать это document. Предоставляет вам три небольшие программы на С, которые вы можете использовать, чтобы понять, что происходит с различными возможными значениями /proc/sys/vm/overcommit_memory.