cpulimitにてプロセスのCPU利用率を制限する方法。(ubuntu22.04,Linux,macOS)

Docker上にWineを構築しWindowsのアプリケーションを動作させているのですが、WindowsアプリケーションがCPUのリソースを無尽蔵に使いそうな勢いなので、cpulimitを利用して制御しました。

今回の対象ソフトは「BaseStation.exe」になります。(所有者はlxd)

topでのリソース利用状況表示。

top - 17:21:46 up  6:45,  3 users,  load average: 1.69, 2.65, 1.69
Tasks: 244 total,   1 running, 240 sleeping,   1 stopped,   2 zombie
%Cpu(s): 13.0 us,  8.2 sy,  0.0 ni, 77.6 id,  0.0 wa,  0.0 hi,  1.2 si,  0.0 st
MiB Mem :   3837.0 total,   1221.4 free,   1328.5 used,   1287.0 buff/cache
MiB Swap:   3838.0 total,   3833.2 free,      4.8 used.   2222.0 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   8302 lxd       20   0 2711864  93684  15812 T  98.6   2.4  62:28.44 BaseStation.+

cpulimitでの制御

# Usage of cpclimit
cpulimit -p PID -l CPU利用率(1-200)

# BaseStation.exeのCPU利用率を15%に制御
cpulimit -p 8302 -l 15

# cpulimit適用後のtop
top - 17:26:03 up  6:49,  3 users,  load average: 0.60, 0.68, 0.71
Tasks: 247 total,   3 running, 242 sleeping,   0 stopped,   2 zombie
%Cpu(s): 19.0 us,  8.2 sy,  0.0 ni, 71.4 id,  0.0 wa,  0.0 hi,  1.4 si,  0.0 st
MiB Mem :   3837.0 total,   1115.2 free,   1406.8 used,   1315.0 buff/cache
MiB Swap:   3838.0 total,   3833.2 free,      4.8 used.   2143.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   8302 lxd       20   0 2711884  93692  15812 S  16.5   2.4  63:14.66 BaseStation.+

参考: BaseStation.exeのPIDを取得し、cpulimitを適用するshell script

#!/bin/bash

ps aux | grep BaseStation.exe | grep lxd
PID=`ps aux | grep BaseStation.exe | grep lxd | awk '{print $2}' `

echo ""
echo "PID for BaseStation.exe must be:"${PID}
echo ""
echo "sudo /usr/bin/cpulimit -p ${PID} -l 15 &"
echo ""

sudo /usr/bin/cpulimit -p ${PID} -l 15 &

echo "Press Enter to continue..."