メモリを多く消費しているサービスを特定したく、systemctlコマンドを使って各サービスの現在のメモリ使用量を取得し、多い順に並べて表示するシェルスクリプト作成した。
#!/bin/bash # 実行中のサービス一覧を取得し、各サービスのメモリ使用量(バイト単位)とサービス名を出力 systemctl list-units --type=service --state=running --no-pager --quiet --plain | awk '{print $1}' | while read -r service_name; do # service_nameが空の場合はスキップ if [ -z "$service_name" ]; then continue fi # MemoryCurrentプロパティが存在しないサービスもあるため、エラー出力を抑制し、値が取得できた場合のみ出力 mem_bytes=$(systemctl show -p MemoryCurrent --value "$service_name" 2>/dev/null) if [ -n "$mem_bytes" ] && [ "$mem_bytes" != "0" ]; then echo -e "$mem_bytes\t$service_name" fi done | sort -k1 -nr | head -n 10 | awk '{ # バイト単位を人間が読みやすい形式に変換 (awkで簡易的に) mem=$1 unit="B" if (mem > 1024) { mem /= 1024; unit="KiB" } if (mem > 1024) { mem /= 1024; unit="MiB" } if (mem > 1024) { mem /= 1024; unit="GiB" } printf "%.2f %s\t%s\n", mem, unit, $2 }'