無駄に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使用率を確認する。