如何将整个用户(不只是进程)限制为少于cpu的10%?


10

我正在运行centos,cpanel / whm,并且已经安装了cpulimit。

我遇到的问题是我的用户之一正在使用大量的CPU。持续超过100%,这正在减慢我的服务器速度。

进一步的问题是,他们是朋友而不是恶意的,所以我不想暂停他们。

还有一个问题是,我不能按流程进行限制,因为此流程每秒都会更改。每次都是不同的过程。

我尝试了以下操作,但不起作用。

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

我刚回来

No process found
No process found
No process found
No process found
No process found
No process found

等等

使用这种极端的cpu用法有两件事。

首先是该位置的文件index.php。其他是[php],无论在WHM中是什么意思。但主要index.php是问题所在。

如果我可以将该index.php文件限制在该位置,则可能有助于缓解此问题。

顺便说一句,我尝试了该-P标志,但是与文档不同,它不能作为选项使用。

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

退货

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

所以看起来我必须用-e标志来做。

但是理想情况下,我想限制整个用户帐户。

是的,我了解cloudlinux,但现在不能这样做。在完成此操作之前,我需要手动完成操作,而无需重新启动服务器。

Answers:


1

没错,您不能限制使用进程(PID)来限制您的朋友,Apache为收到的每个请求都生成一个新进程(Worker),每次都分配一个新的PID。

根据您在WHM -> MultiPHP Manager -> PHP Handlers其中设置的PHP处理程序,Apache将自己运行PHP脚本,或者以拥有该文件的用户身份运行它们。如果您suPHP用作处理程序,则PHP进程将由拥有该文件的帐户执行。

如果脚本是由所有者执行的,则可以通过将脚本添加到/etc/security/limits.conf文件中来限制cpu的使用。尽管您不能使用它来精确地限制CPU百分比,但是您可以修改它们的“ nice”值,以便它们的进程比服务器上其他进程的优先级低。这样,其他进程将不必等待很长时间。

我从来没有亲自使用过它(我运行CloudLinux),但是我相信以下条目应该可以解决这个问题:

username    hard    priority    30

这会将用户执行的进程的最大优先级设置为30。据我了解,较高的优先级实际上意味着其他进程(具有较低的优先级)获得更多的CPU时间。

在运行cPanel的服务器上,大多数进程的优先级为20,因此按照上述逻辑,将该用户的优先级设置为30,应允许其他进程在这些进程之前执行。


7

您尝试过Cgroups吗?


  • 安装sudo yum install libcgroup并启动服务sudo service cgconfig start
  • 之后,通过运行查看cgroup的子系统配置 sudo ls /cgroup

创建一个名为的cgroup limitcpu。以group开头的行创建cgroup并设置子系统参数。

示例/etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

对于CPU限制,可以使用几个可调参数来限制公然的CP​​U使用率。

如果cgroup中的任务应该能够每1秒访问一次单个CPU 0.1(10%)秒,请将cpu.cfs_quota_us设置为100000,将cpu.cfs_period_us设置为1000000。


Cgred是一项服务(启动cgrulesengd服务),该服务根据/etc/cgrules.conf文件中设置的参数将任务移至cgroup。/etc/cgrules.conf文件中的条目可以采用以下两种形式之一:

user subsystems control_group
user:command subsystems control_group

其中user以用户名或组名开头的“ @”字符。用subsystems逗号分隔的子系统名称列表替换,control_group代表cgroup的路径,并command代表进程名称或进程的完整命令路径。

示例etc / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefox任何用户运行的进程都会自动添加到浏览器中,cgroup并限制在cpu和内存子系统中。

  • memhogadmin组中任何人运行的进程将被添加到cgroup limitmem并限制在内存子系统中。

    -您的用户cpuhog将会添加到cgroup'limitcpu'中,并限制在cpu子系统中。


在提前使用的情况下,您可以尝试使用模板。

例如,在/etc/cgconfig.conf中指定以下模板:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

然后,使用/etc/cgrules.conf条目第三行中的users /%g /%u模板,该模板如下所示:

peter:ftp       cpu     users/%g/%u

%g and %u上面使用的变量将根据ftp进程的所有者自动用组和用户名替换。

如果该进程属于adminstaff组中的peter,则上述路径将转换为users/adminstaff/peter

然后,cgred服务搜索该目录,如果该目录不存在,则cgred创建该目录并将该进程分配给users / adminstaff / peter / tasks。

请注意,模板规则仅适用于配置文件中的模板定义,因此,即使在/etc/cgconfig.conf中定义了“ group users / adminstaff / peter”,它也会被“ template users /%g /%”所忽略。你”。

Digital Ocean教程。

控制组简介。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.