활성 사용자가 사용 가능한 메모리를 공평하게 공유해야 하는 다중 사용자 시스템이 있습니다.
총 메모리 소비량이 가장 높은 사용자 프로세스를 종료하도록 Linux를 설정할 수 있습니까?
이는 시스템 메모리가 부족할 때 발생합니다. 내 생각에는 이 사용자의 가장 큰 프로세스가 종료되어야 한다고 생각합니다.
사용자 수가 다양하고 대부분의 사용자가 작업하지 않으면 메모리가 낭비되기 때문에 사용자에게 메모리 제한을 설정하고 싶지 않습니다. 가장 큰 프로세스를 종료하는 것은 가능하지만 사용자별로 수행해야 합니다. 그렇지 않으면 한 사용자가 여러 개의 작은 프로세스를 생성하여 다른 사용자의 중간 크기 프로세스가 종료될 수 있습니다.
답변1
아래 명령은 상자에서 가장 많은 메모리를 사용하는 프로세스를 종료합니다. 이것이 당신이 찾고 있는 것입니까, 아니면 가장 많은 메모리를 사용하는 사용자 프로세스여야 합니까(이는 메모리 부족의 가장 큰 원인 및 원인이 아닐 수 있음)?
#!/bin/bash
free=`awk '/^Mem/ {print $3}' <(free -m)`
psout=`ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2`
pid=`echo $psout | cut -d " " -f 6`
if (( $free < 1 )); then
kill -9 $pid
fi;
편집: 이제 귀하의 추론을 확인하고 위의 코드를 수정해 보겠습니다.
편집 2: 오늘 이 프로젝트를 완료할 필요는 없으므로 올바른 길을 안내해 드리겠습니다. 다음 URL에서 smem(python 스크립트)을 다운로드할 수 있습니다. https://www.selenic.com/smem/download/
-u 옵션을 사용하여 루트로 실행하면 각 사용자가 사용한 총 메모리 양을 알 수 있습니다. 사용된 메모리별로 정렬된 배열에 넣고 위의 ps 명령에 -u를 추가하면 해당 사용자에 대한 최악의 범죄자를 죽일 수 있습니다.