systemd 데몬에서 일부 계정 기능을 활성화했습니다.
DefaultCPUAccounting=yes
DefaultIOAccounting=yes
DefaultMemoryAccounting=yes
DefaultTasksAccounting=yes
예를 들어 이제 서비스 메모리 사용량을 볼 수 있습니다.
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-02-21 15:10:05 UTC; 17min ago
Docs: http://supervisord.org
Main PID: 1842113 (supervisord)
Tasks: 886 (limit: 108515)
Memory: 31.9G
"31.9G" 값을 얻는 방법은 무엇입니까?
물론 텍스트를 구문 분석할 수 있지만 bash 구문 분석을 단순화하기 위해 해당 값을 얻을 수 있는 systemd 명령이 있는지 궁금합니다.
다음 명령을 찾았습니다.
root@panel:~# systemctl show supervisor | egrep -i memorycurrent
MemoryCurrent=34285473792
a는 아마도 이것을 확인하는 가장 좋은 명령일 것입니다. 나는 누군가가 더 나은 것을 가지고 있는지 확인하고 싶었습니다. 데몬과 스레드가 사용하는 메모리를 알아야 하기 때문에 systemd를 사용하고 싶습니다.
답변1
dbus 호환 시스템 솔루션을 원한다면 다음을 수행할 수 있습니다.
$ busctl introspect \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service
그러면 서비스에 대한 모든 서비스 속성 목록이 제공됩니다. 어떤 속성이 흥미로운지 알고 나면 명령을 단순화하고 해당 특정 속성을 요청할 수 있습니다.
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent
그러면 다음이 표준 출력으로 반환됩니다.
t 34285473792
앞에 있는 t
것은유형 사양. UINT64라고 나와있습니다.
이를 "파싱"하려면 다음으로 파이프하거나 데이터를 가져오고 다음으로 파이프하는 awk
데 사용할 수 있습니다 .-j
json
jq
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent | awk '{print $2}'
34285473792
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent -j | jq '.data'
34285473792
org.freedesktop.systemd.Unit
활동 상태나 종속성과 같은 정보를 찾고 있다면 인터페이스가 더 적합할 수도 있지만, 여기서 설명하는 구체적인 정보는 org.freedesktop.systemd.Service
인터페이스에서만 찾을 수 있다고 생각합니다.
이 dbus
인터페이스는 훌륭한 저수준 인터페이스입니다 systemd
. C로 무언가를 작성하려면 systemd
동일한 인터페이스(여기에 나열된 것과 동일한 서비스, 개체, 인터페이스 및 속성)를 사용하여 상호 작용 합니다.