bash 변수에 저장할 시스템 서비스 메모리 사용량을 가져옵니다.

bash 변수에 저장할 시스템 서비스 메모리 사용량을 가져옵니다.

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데 사용할 수 있습니다 .-jjsonjq

$ 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동일한 인터페이스(여기에 나열된 것과 동일한 서비스, 개체, 인터페이스 및 속성)를 사용하여 상호 작용 합니다.

관련 정보