[server] 리눅스에서 사용자 당 메모리 사용량?

내 리눅스 박스에 20 명의 사용자가 로그인했다고 가정 해 봅시다. 각 메모리가 얼마나 많은 메모리를 사용하고 있는지 어떻게 알 수 있습니까?



답변

smem을 사용해 볼 수 있습니다 (자세한 내용은 ELC2009 : smem사용한 메모리 사용 시각화 참조 ). 특히, sudo smem -u원하는 정보를 제공해야합니다.


답변

공유 메모리 문제를 무시하는 다음은 로그인 한 모든 사용자에게 RSS 및 VMEM을 제공하고 vmem별로 정렬하여 귀여운 열로 구성하는 빠른 스크립트입니다.

(echo "user rss(KiB) vmem(KiB)";
 for user in $(users | tr ' ' '\n' | sort -u); do
   echo $user $(ps -U $user --no-headers -o rss,vsz \
     | awk '{rss+=$1; vmem+=$2} END{print rss" "vmem}')
 done | sort -k3
) | column -t


답변

RSS의 합계를 얻으려면 다음과 같이 작동한다고 생각합니다. 이것은 사용자 kbrandt와 root에 대한 RSS의 합계를 얻는 것입니다.

ps -U kbrandt,root --no-headers  -o rss | (tr '\n' +; echo 0) | bc


답변

까다로운 질문입니다. “ps”출력의 총 RSS + 스왑 양을 쉽게 요약 할 수 있지만 공유 메모리는 어떻습니까? 동일한 프로세스를 실행하는 경우 다른 사용자가 동일한 코드 페이지를 쉽게 공유 할 수 있습니다. 누구에게 그것을 설명합니까? 버퍼와 캐시는 어떻습니까? 실제로 결과가 얼마나 정확한지에 달려 있습니다. 더 정확할수록 더 어려워집니다.


답변

사용자별로 메모리 사용량을보고하는 방법을 잘 모르겠지만 사용량 제어에 관심이 있다면 ulimit를 찾아야합니다. 시스템의 메모리 및 기타 리소스에 대해 사용자 / 그룹별로 하드 및 소프트 제한을 설정할 수 있습니다.


답변

다음과 같은 것을 시도해 볼 수 있습니다.

ps auxU maxwell | awk '{memory + = $ 4}; END {인쇄 메모리} '


답변

같은 것을 찾고, 나는 이것을 알아 냈습니다.

ps aux | awk '{arr[$1]+=$4}; END {for (i in arr) {print i,arr[i]}}' | sort -k2

mem별로 정렬 된 프로세스를 사용자별로 그룹화하여 (column1, $ 1) 다른 항목별로 그룹화하고 다른 항목을 합산하여 $ 1 및 $ 4를 변경

  • $ 1은 첫 번째 열입니다 : 사용자 이름 (이에 따라 그룹화)
  • $ 4는 네 번째 열입니다 : % mem (이 요약)

나는 해결책을 찾아서 기꺼이 공유하고 싶었습니다.