OOM Killer
找出最可能被杀掉进程
#!/bin/bash
printf "\e[5m%9s %9s %s\e[0m\n\n" "oom_score" "PID" "cmdline"
for proc in $(find /proc/ -maxdepth 1 -regex '/proc/[0-9]+');do
printf "%9d %9d %s\n" \
"$(cat $proc/oom_score)" \
"$(basename $proc)" \
"$(cat $proc/cmdline | tr '\0' ' ' | head --bytes 50)"
done 2>/dev/null | sort -nr | head -10
simulation:
#include <stdlib.h>
#include <stdio.h>
#define BYTES (16*1024*1024)
#define true 1
int main(void)
{
printf("oom !\n");
while(true){
char *p=malloc(BYTES);
if (p == NULL){
return -1;
}
printf("malloc memory pointer: %p, value: %18d, hex: %x\n",p,p,p);
}
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#define BYTES (8*1024*1024)
#define N (10240)
int main(void)
{
printf(" malloc oom\n");
int i;
for (i=0;i<N;++i)
{
char *p=malloc(BYTES);
if (p==NULL)
{
return -1;
}
}
printf(" endless lopp\n");
while(1);
return 0;
}

浙公网安备 33010602011771号