V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yqf0215
V2EX  ›  问与答

阿里云 99 元活动服务器有点坑。namespace 和 cgroup 来限制编译进程使用不超过 4%的 cpu 使用率,有大佬能指点一下吗?

  •  
  •   yqf0215 · 2023-12-11 18:58:56 +08:00 · 1087 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。

    阿里云 99 元活动服务器有点坑,编译 lamp 的时候,之前用的 lamp.sh ,没出过问题,但这次是在阿里云 99 元的活动服务器上购买的,编译过程总是出错、反复重试还是出错,检查错误,发现是收到了一个杀死进程的信号。经过检索,可能原因是 cpu 性能受到限制,超过限制时,会发送停止经常的信号。

    晕啊,过去以为的限制性能,是 cpu 长时间达到 5%后会变慢,没想到是直接把进程杀了。。。

    准备用 namespace 和 cgroup 来限制编译进程使用不超过 4%的 cpu 使用率,有大佬能指点一下吗? 我尝试的方法:

    1. 创建一个新的 cgroup

    首先,按照之前的步骤创建一个新的 cgroup ,并设置 CPU 限制。例如,创建一个名为 limited_cpu 的 cgroup ,并设置 CPU shares:

    sudo cgcreate -g cpu:/limited_cpu
    sudo cgset -r cpu.cfs_quota_us=50000 limited_cpu
    sudo cgset -r cpu.cfs_period_us=100000 limited_cpu
    
    1. 使用 unshare 运行编译环境
    sudo unshare --fork --pid --mount-proc bash
    
    1. 在新的 namespace 中添加进程到 cgroup

    在新的 bash 会话中,您可以启动编译过程。但首先,您需要将这个 bash 会话的 PID 添加到之前创建的 cgroup 中。由于您使用了独立的 PID namespace ,您需要找到这个 bash 会话在全局 PID namespace 中的对应 PID 。

    这可以通过查看新 bash 会话中 $$ 变量的值来实现,然后在主会话中找到对应的子进程。例如,在新的 bash 会话中:

    echo $$
    

    然后在主会话中,使用如下命令将其添加到 cgroup:

    sudo cgclassify -g cpu:limited_cpu [Global PID]
    

    将 [Global PID] 替换为您刚才找到的 PID 。 但这步遇到了问题,因为echo $$得到的 pid 无法使用。

    大佬能指点一下吗?这步应该如何操作?

    1. 最后一个步骤是在新的 namespace 中进行编译,第三步卡住了,还没到这一步
    6 条回复    2023-12-13 01:31:20 +08:00
    mason961125
        1
    mason961125  
       2023-12-11 19:05:05 +08:00
    ?这真的是阿里的问题吗,host 杀你 guest 的进程呗
    mason961125
        2
    mason961125  
       2023-12-11 19:07:07 +08:00
    你这个脑回来我真的不知道怎么说了,一般进程被 kill 的最大原因是 OOM ,云服务器一般都默认不配 swap ,并行编译这种非常吃内存的行为 OOMKilled 不是很正常么。
    Masoud2023
        3
    Masoud2023  
       2023-12-12 09:50:45 +08:00
    不太懂你们 PHP 崽为什么这么喜欢用这个老掉牙的 lamp 。

    docker 部署服务有什么障碍吗?
    Masoud2023
        4
    Masoud2023  
       2023-12-12 09:52:15 +08:00
    我也没听说过有哪家 kvm 的 vps 还能这么限制,或者一般都是超过限制直接停机。

    同意 2 楼说法,检查一下内存吧。
    yqf0215
        5
    yqf0215  
    OP
       2023-12-12 21:48:10 +08:00
    很有道理,我创建一个 swap file ,然后再编译试一试
    yqf0215
        6
    yqf0215  
    OP
       2023-12-13 01:31:20 +08:00
    成功编译了。。。多谢指点。
    作为一个用了 20 年 linux 的人,居然忘了小容量内存导致的这个问题,真是太丢人了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:25 · PVG 02:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.