나는 시스템의 총 메모리를 얻는 방법을 알고 있습니다.
$ free -lm
total used free shared
Mem: 3008 2495 513 57
Nginx에서 작업자 프로세스의 기본 메모리 소비(RSS)를 얻는 방법을 알고 있습니다.
$ ps -C nginx -O rss
PID RSS S TTY TIME COMMAND
1564 1336 S ? 00:00:00 nginx: master process /usr/sbin/nginx
1565 1756 S ? 00:00:00 nginx: worker process
1566 1756 S ? 00:00:00 nginx: worker process
1567 1756 S ? 00:00:00 nginx: worker process
1568 1756 S ? 00:00:00 nginx: worker process
이제 교체에 의지하지 않고 시스템에서 사용할 수 있는 작업자 프로세스 수를 확인하려면 다음을 수행하십시오.
echo $((3008 * 1024))
3080192
$ echo $((3080192 / 1756))
1754
내 서버는 스왑을 사용하지 않고도 1754개의 nginx 작업자 스레드를 처리할 수 있습니다. 그러나 위의 다단계 프로세스를 명령줄에서 실행할 수 있는 단일 줄로 바꿀 수 있다면 좋을 것입니다.
내 문제는 명령줄의 free 명령에서 "3008"을 추출하는 방법을 모른다는 것입니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
내 문제는 명령줄의 free 명령에서 "3008"을 추출하는 방법을 모른다는 것입니다.
다음 출력이 주어지면:
free -lm
total used free shared buffers cached
Mem: 3757 1765 1991 138 122 766
Low: 3757 1765 1991
High: 0 0 0
-/+ buffers/cache: 876 2880
Swap: 7772 0 7772
이 시도:
free -lm | grep '^Mem' | awk '{ print $2 }'
3757
total
그러면 행 의 열이 반환됩니다 Mem:
. 나는 3757
.
답변2
awk에 대한 무료 파이핑은 필요한 값을 추출합니다.
free -l | awk '/^Mem/{print $2}'
답변3
그것은 다음과 같습니다:
echo $(($(($(free -lm | grep Mem | awk '{print $2}') * 1024)) / $(ps -C nginx -O rss |grep 'nginx: 작업자 프로세스$' | awk ' {인쇄 $2}' |
답변4
머리, 꼬리, 컷을 사용하여 이 작업을 수행할 수 있어야 합니다.
free -lm | head -2 | tail -1 | tr -s ' ' | cut -f2 -d' '
head -2
상위 2개 라인이기 때문입니다.
total used free shared buffers cached
Mem: 3757 1765 1991 138 122 766
tail -1
왜냐면 이게 마지막 줄이거든요.
Mem: 3757 1765 1991 138 122 766
tr -s ' '
- 공백 체인을 단일 공백으로 변환합니다.
Mem: 3757 1765 1991 138 122 766
마지막으로 - cut -f2 -d' '
- 공백으로 구분된 두 번째 필드를 가져옵니다.
3757