DS218 参数配置如下
CPU: Realtek RTD1296 SoC
CPU 时钟频率:1.4 GHz
CPU 核心数:4
DS218【Arm64 芯片】 在安装了 aarch64 架构的 Docker 应用后,发现在部署高密集 CPU 任务比如青龙面板的时候,DS218CPU 占用时常占满 99%,进而导致主板温度升高,小型 NAS 服务器宕机了……
ARM Docker 目前无法实现 CFS 机制,通过 Docker 指令来限制密集型容器的对资源 CPU 的占用
WARNING: No kernel memory TCP limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
查询了 Linux 的对于资源调度的机制后,选择了一款 CPULIMITS 软件,来对 Docker 容器本身进行资源的限制,从而避免了该款 NAS 机型因为高并发密集 CPU 资源抢占而频繁死机的情况。
具体解决办法:
本地 shell 命令行中采用本地安装的方式,来安装 cpulimit 软件,具体步骤如下
实操
cd /tmp
wget 'https://sunpma.com/other/oss/cpulimit-1.1.tar.gz'
tar cpulimit-1.1.tar.gz
cd cpulimit-1.1
make
cp cpulimit /usr/local/sbin/
rm -rf cpulimit*
使用实例
限制程序名为 xmrig
的程序仅使用 60%
的 CPU 使用率,并在后台一直运行;
cpulimit -e xmrig -l 60 -b
限制进程号为 10086
的程序仅使用 60%
的 CPU 利用率,并在后台一直运行;
cpulimit -p 10086 -l 60 -b
限制绝对路径下的软件仅使用 60%
的 CPU 利用率,并在后台一直运行;
cpulimit -e /usr/local/nginx/sbin/nginx -l 60 -b
关闭 cpulimit 后台进程(取消所有限制)
kill $(pidof cpulimit)
使用说明
-p | --pid=N | pid of the process | 进程的 PID |
---|---|---|---|
-e | --exe=FILE | name of the executable program file | 可执行程序文件名 |
-P | --path=PATH | absolute path name of the | 进程的绝对路径名 |
-b | --background | run in background | 后台运行 |
-l | --limit=N | percentage of cpu allowed from 1 up | 允许的 CPU 百分比,最低为 1% |
-z | --lazy | exit if there is no suitable target process | 如果目标进程退出或无目标进程则终止 |
-h | --help | display this help and exit | 显示帮助并退出 |
注意事项
- 限制 CPU 的百分比按照实际的 CPU 数量而定,比如单核最高为 100%,双核最高为 200%,三核最高为 300%,以此类推即可;
- ROOT 用户可以限制所有的进程,普通用户只能限制用户有权限管理的进程;
注意:DS218 安装了 CPULIMIT 软件后,是没有-b 的选项的,所以退出 shell 后要想让配置生效,必须结合 nohup 和&命令使用即可,机器如果重启限制是否还在,未测试。
linux 退出终端运行程序,linux nohup 命令实现退出终端后程序继续后台运行
摘要
Unix/Linux下一般想让某个程序在后台运行,很多都是使用&在程序结尾来让程序自动运行;但如果要想在退出终端后,程序依然还在后台运行,则要用nohup与&组合来实现。
nohup 命令
用途: 不挂断地运行命令
语法:nohup Command [ Arg … ] [& ]
描述
nohup 命令运行由 Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序:要运行后台中的 nohup 命令,需要添加&到命令的尾部。
日志记录
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的nohup.out 文件中。如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
使用时注意
在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用。
nohup cpulimit -e /volume1/@appstore/Docker/bin/containerd -l 60 &
nonadmin@DS218:~$ sudo -i
Password:
root@DS218:~# echo $(pidof cpulimit)
24339
root@DS218:~# ps -ef | grep 24339
root 24339 1 0 05:37 ? 00:00:00 cpulimit -e /volume1/@appstore/Docker/bin/containerd -l 50
root 24488 24417 0 05:38 pts/1 00:00:00 grep --color=auto 24339
附件如下
cpulimit1.1.zip
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于