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
同じインターフェイス(ここにリストされているものと同じサービス、オブジェクト、インターフェイス、およびプロパティ)を使用して対話します。