無駄にCPUを消費するデーモンを作る
とある目的でCPU使用率を10%以上に維持する必要が生じたため、その実現方法を考えた結果、 systemdを使ってCPU使用率に制限をかけつつ無限ループを行う、という方法に行き着いた。
Unitファイルの作成
まずはsystemdのユニットファイルを以下のように作成する。
作成するファイルパスは/etc/systemd/system/cpu_consume.service
とする。
[Unit]
Description=Wasteful CPU consumption
After=network.service
[Service]
Type=simple
ExecStart=/bin/bash -c 'while :; do :; done'
Restart=always
CPUShares=128
CPUQuota=25%
[Install]
WantedBy=multi-user.target
上記ユニットファイルのCPUQuota
がCPU使用率を設定するところで、CPUコア1つをすべて使った場合に100%となる。
今回はCPUを2コア積んでいて、2コア全体の10%以上にしたかったので、20%から少し余裕を見て25%とした。
CPUShares
の値は適当。
起動すると、bashでwhile :; do :; done
の無限ループをひたすら繰り返す。
サービス起動
以下のようにコマンドを打ち込んで、上記ユニットファイルで定義された無限ループサービスを起動する。
$ sudo systemctl daemon-reload
$ sudo systemctl enable cpu_consume
$ sudo systemctl start cpu_consume
$ systemctl status cpu_consume.service
systemctl status cpu_consume.service
● cpu_consume.service - Wasteful CPU consumption
Loaded: loaded (/etc/systemd/system/cpu_consume.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-03-01 19:21:40 JST; 2 weeks 6 days ago
Main PID: 1836085 (bash)
Tasks: 1 (limit: 1070)
Memory: 364.0K
CGroup: /system.slice/cpu_consume.service
└─1836085 /bin/bash -c while :; do :; done
確認
top
などで実際のCPU使用率を確認する。