
저는 소프트웨어 개발자이고 불안정한 소프트웨어에 많이 노출되었습니다. 나는 최근에 시스템이 멈추고 응답하지 않을 때까지 메모리가 누출되는 작은 게임을 만들었습니다. 일반적으로 REISUB는 도움이 되지만 때로는 도움이 되지 않아 강제 정전을 해야 하는 경우도 있습니다.
그런 다음 다른 프로그램에서 이런 일이 다시 발생했기 때문에 일정 기간 동안 PID당 특정 값을 초과하면 메모리 사용량을 모니터링하는 스크립트를 작성하면 이를 쉽게 방지할 수 있다고 생각했습니다. 그러면 SIGKILL을 받게 됩니다. 그리고 즉시 내려주세요.
어떤 아이디어가 있나요? 감사해요
답변1
earlyoom
여기에 나열된 대안 중 하나를 설치 하고 활성화하십시오.
https://github.com/hakavlad/nohang
Fedora는 이제 기본적으로 Earlyoom을 사용합니다.
Linux 커널 OOM 처리는 매우 좋지 않으며 사용자 공간 유틸리티/도우미 없이는 제대로 작동하지 않는 경우가 많습니다.
man limits.conf
cgroup을 사용하여 애플리케이션 RAM 사용량을 제한 할 수도 있습니다 .
답변2
간단한 아이디어: 메모리가 주어진 값을 초과하는지 확인하고 잠시 후에 다시 확인하십시오. 공격하고 3회 연속 공격하면 사망합니다. 알아야 할 사항: 프로세스의 PID
#!/bin/bash
pid=$1
strike=0
#as long as process exists
while (kill -0 $pid 2>/dev/null) ; do
#get RAM usage in kB
ram=$(pmap -x $pid | tail -1 | awk '{print $3}')
#compare to threshold, 1,000,000kB
if [[ 1000000 -lt $ram ]] ; then
strike=$((strike+1))
if [[ strike -eq 3 ]] ; then
kill $pid
exit
fi
else
strike=0
fi
sleep 5
done