Я знаю, как получить общую память в системе:
$ free -lm
total used free shared
Mem: 3008 2495 513 57
Я знаю, как получить потребление основной памяти (RSS) рабочими процессами в Nginx:
$ 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, не прибегая к свопу. Однако было бы здорово, если бы я мог взять этот многоступенчатый процесс, описанный выше, и сделать его одной строкой, которую можно будет выполнить из командной строки.
Моя проблема в том, что я не знаю, как извлечь это «3008» из бесплатной команды из командной строки. Как мне с этим справиться?
Вы можете сделать это с помощью head, tail и cut:
free -lm | head -2 | tail -1 | tr -s ' ' | cut -f2 -d' '
head -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
Свободный конвейер для awk извлечет нужное вам значение:
free -l | awk '/ ^ Mem / {print $ 2}'
Моя проблема в том, что я не знаю, как извлечь это «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
.
Примерно так:
echo $ (($ (($ (free -lm | grep Mem | awk '{print $ 2}') * 1024 )) / $ (ps -C nginx -O rss | grep 'nginx: рабочий процесс $' | awk '{print $ 2}' | tail -1)))