AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[cgroup](server)

Martin Hope
Daniel Compton
Asked: 2021-12-09 19:03:39 +0800 CST

对于在 EC2 ECS 上运行的任务,memory 和 memoryReservation 如何工作?

  • 0

EC2 ECS 允许您为 ECS 任务和在这些任务中运行的容器指定memory和。memoryReservation我了解容器设置映射memory到memoryReservation底层Docker 内存设置。

但是,我不确定在 EC2 ECS 下具有和设置的任务意味着什么。这仅用于ECS的任务调度,还是有一些运行时影响?memorymemoryReservation

假设我已经在容器上设置了内存限制,那么在任务上设置额外的内存限制是什么意思?

amazon-ecs docker memory-usage cgroup
  • 1 个回答
  • 447 Views
Martin Hope
j4nd3r53n
Asked: 2020-07-10 00:52:07 +0800 CST

使用 cgroups/systemd 限制每个用户的资源使用

  • 1

Debian 10:我想限制所有用户的内存、CPU 等,除了root; 我找到了几篇关于这个的文章,但到目前为止,它们都围绕着 cgconfig 展开,这似乎不是现在完成的方式。我已经看到了一些使用切片的建议,因此对于 UID 1000,创建如下内容:

# cat /lib/systemd/system/user-1000.slice
[Unit]
Description=User and Session Slice
Documentation=man:systemd.special(7)
Before=slices.target
MemoryHigh=20M

[Slice]
Slice=user-slice

[Install]
WantedBy=multi-user.target

并使用systemctl enable user-1000.slice. 这似乎成功了一半:

 $ systemctl status user-1000.slice
Warning: The unit file, source configuration file or drop-ins of user-1000.slice changed on disk. Run 'systemctl daemon-reload' to reload units.
● user-1000.slice - User Slice of UID 1000
   Loaded: loaded (/lib/systemd/system/user-1000.slice; enabled; vendor preset: enabled)
  Drop-In: /usr/lib/systemd/system/user-.slice.d
           └─10-defaults.conf
   Active: active since Thu 2020-07-09 07:37:28 UTC; 1h 8min ago
     Docs: man:systemd.special(7)
           man:[email protected](5)
    Tasks: 7 (limit: 5237)
   Memory: 5.4M
   CGroup: /user.slice/user-1000.slice
           ├─session-15.scope
           │ ├─1089 sshd: jan [priv]
           │ ├─1107 sshd: jan@pts/1
           │ ├─1108 -bash
           │ ├─1113 systemctl status user-1000.slice
           │ └─1114 pager
           └─[email protected]
             └─init.scope
               ├─1092 /lib/systemd/systemd --user
               └─1093 (sd-pam)

但是,MemoryHigh未设置:

 $ systemctl show user-1000.slice
Slice=user.slice
ControlGroup=/user.slice/user-1000.slice
...
MemoryHigh=infinity
...

我似乎很接近,但一定少了点什么——那是什么?

systemd debian-buster cgroup
  • 1 个回答
  • 1348 Views
Martin Hope
j4nd3r53n
Asked: 2020-07-09 07:04:19 +0800 CST

systemd:如何创建一个新的 .slice 文件?

  • 0

我正在努力了解如何在我的 debian 10 系统上设置新切片。我system-db.slice通过复制system.slice和更改几件事创建了一个文件:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=System DB Slice
Documentation=man:systemd.special(7)
DefaultDependencies=no
Before=slices.target
Requires=system.slice
After=system.slice

这似乎根本没有做任何事情。例如,它不会出现在 中systemd-cgls。另一方面,systemctl发现它:

# systemctl status system-db.slice
● system-db.slice - System DB Slice
   Loaded: loaded (/etc/systemd/system/system-db.slice; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd.special(7)

显然有些事情我没有做或做错。我应该怎么做?我在哪里可以了解更多信息?

debian systemd cgroup
  • 1 个回答
  • 2867 Views
Martin Hope
Azeirah
Asked: 2020-05-03 07:50:11 +0800 CST

达到进程限制,但不确定如何

  • 0

我运行一个服务器,主要用于随机 Docker 容器和作为 Gitlab-CI 运行器。每隔一段时间,当服务器运行一周左右时,我就会遇到进程资源限制。

例如,我尝试配置 gitlab runner,

...
Registering runner... succeeded                     runner=gy1zjHEv
runtime: failed to create new OS thread (have 9 already; errno=11)
runtime: may need to increase max user processes (ulimit -u)
fatal error: newosproc
...

或者几分钟后,尝试安装该strace实用程序

(in dutch)
...
Instellen van strace (4.21-1ubuntu1) ...
Bezig met afhandelen van triggers voor man-db (2.8.3-2ubuntu0.1) ...
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
Bezig met afhandelen van triggers voor libc-bin (2.27-3ubuntu1) ...

它转化为fork failed: Resource is temporarily unavailable

有什么东西导致fork抛出EAGAIN。

超限

$ ulimit -u
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 1029355
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62987
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

我的最大用户进程设置为62987,我离使用 62,000 个进程还差得很远。gitlab 异常还显示当前进程数为 9,这应该是“太高”了吗?

如果我离配置的 ulimit 不远,克隆怎么可能遇到进程资源限制?

ulimit cgroup fork
  • 1 个回答
  • 1056 Views
Martin Hope
ledneb
Asked: 2017-02-22 09:59:13 +0800 CST

我的容器的内存去哪儿了?

  • 5

我有一个容器泄漏内存。或者至少,报告的内存消耗快速上升。如果我跑得最好,我会得到这个:

top - 16:56:51 up 6 days, 17:25,  0 users,  load average: 0.16, 0.27, 0.31
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  0.7 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   7676380 total,  4089380 used,  3587000 free,   675164 buffers
KiB Swap:        0 total,        0 used,        0 free.  2586496 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   46924  15196   6456 S   0.0  0.2   0:15.54 supervisord
    8 root      20   0 3526084  47976  29660 S   0.0  0.6   0:59.15 dotnet
  568 root      20   0   20364   3332   2728 S   0.0  0.0   0:00.09 bash
 2800 root      20   0   21956   2420   2032 R   0.0  0.0   0:00.00 top

我现在报出来的数字是90M,不算加起来。我很确定/sys/fs/cgroup/memory/memory.usage_in_bytes报告的内容是:

> cd /sys/fs/cgroup/memory/
> cat cgroup.procs
1
8
568
2494

> cat memory.usage_in_bytes
92282880

> pmap -p 1 | tail -n 1
 total            46924K

> pmap -p 8 | tail -n 1
 total          3599848K

> pmap -p 568 | tail -n 1
 total            20364K

> ps 2494
  PID TTY      STAT   TIME COMMAND

在我看来,这里有大量的内存“丢失”......如果我memory.usage_in_bytes在这段时间里再次猫,我一直在输入这个:

> cat memory.usage_in_bytes
112291840

> pmap -p 1 | tail -n 1
 total            46924K

> pmap -p 8 | tail -n 1
 total          3452320K

> pmap -p 568 | tail -n 1
 total            20368K

显然没有什么可以解释这种内存使用情况。如果我看一下,memory.stat我会看到:

# cat memory.stat
cache 89698304
rss 30699520
rss_huge 0
mapped_file 1552384
writeback 0
pgpgin 102007
pgpgout 72613
pgfault 115021
pgmajfault 8
inactive_anon 1519616
active_anon 30789632
inactive_file 417792
active_file 87654400
unevictable 4096
hierarchical_memory_limit 18446744073709551615
total_cache 89698304
total_rss 30699520
total_rss_huge 0
total_mapped_file 1552384
total_writeback 0
total_pgpgin 102007
total_pgpgout 72613
total_pgfault 115021
total_pgmajfault 8
total_inactive_anon 1519616
total_active_anon 30789632
total_inactive_file 417792
total_active_file 87654400
total_unevictable 4096

片刻之后:

# cat memory.stat
cache 89972736
rss 30777344
rss_huge 0
mapped_file 1552384
writeback 0
pgpgin 102316
pgpgout 72836
pgfault 115674
pgmajfault 8
inactive_anon 1519616
active_anon 30867456
inactive_file 417792
active_file 87928832
unevictable 4096
hierarchical_memory_limit 18446744073709551615
total_cache 89972736
total_rss 30777344
total_rss_huge 0
total_mapped_file 1552384
total_writeback 0
total_pgpgin 102316
total_pgpgout 72836
total_pgfault 115674
total_pgmajfault 8
total_inactive_anon 1519616
total_active_anon 30867456
total_inactive_file 417792
total_active_file 87928832
total_unevictable 4096

但我会说实话;我真的不知道我在看什么。我又怀疑地看着active_file;我真的不知道我在看什么。

一些注释和观察:

  • 容器由 Kubernetes 调度。
  • 该程序将大量数据写入标准输出。
  • 将写入控制台的数据量减少到接近零可以解决报告的内存泄漏问题。
  • 部署一个只向标准输出写入大量数据的程序似乎并没有表现出相同的内存泄漏(!)

所以!我应该如何去寻找这些内存被消耗的地方?有什么对任何人来说显而易见的东西——也许有什么东西在盯着我看,或者我没有看我应该看到的东西?

谢谢!

linux memory docker cgroup
  • 1 个回答
  • 1810 Views
Martin Hope
Jeff Kubina
Asked: 2016-10-04 07:31:49 +0800 CST

有没有办法设置 systemd 在其中启动进程的 cgroup?

  • 3

systemd 在 /system.slice/process-name.service cgroup 中启动一个进程。我想在不同的 cgroup 中启动该进程。我可以在 ExecStart 选项中使用 cgexec 来做到这一点,但有更好的方法吗?

systemd cgroup
  • 1 个回答
  • 777 Views
Martin Hope
Brendan Dolan-Gavitt
Asked: 2016-08-15 07:26:54 +0800 CST

透明地冻结和解冻进程?

  • 3

我正在寻找一种方法来透明地冻结(暂停)一个进程,然后再解冻它。这在 中是可能的SIGSTOP,但SIGSTOP会导致父级被通知(通过从 中返回waitpid),这例如导致 bash 将交互式进程置于后台(该方法的问题在此链接中有更详细的描述)。

cgroup子系统有办法通过写入 中的文件来完成此操作/sys/fs/cgroup/freezer/,但这仅适用于 cgroup 级别 - 也就是说,您一次只能冻结整个进程/线程组。我想可以通过安排将每个进程放在自己的 cgroup 中来解决这个问题,但这似乎有点麻烦,而且可能很危险,因为systemdet al. 已经cgroups用于他们自己的目的。

我非常接近于编写一个将底层freeze_taskAPI 暴露给用户空间的内核模块,但如果可能的话,我真的很想避免这样做!

linux cgroup
  • 1 个回答
  • 3272 Views
Martin Hope
chandru-ops
Asked: 2016-05-26 03:08:28 +0800 CST

cgroup 相同的进程具有不同的资源

  • 0

我通过源安装了一个 Jboss 应用程序服务器,并在不同端口上的单个机器上以同一用户的身份运行多个 JBoss 实例(比如 3 个)。使用 cgroups,我尝试为我启动的每个实例进行不同的资源分配。我知道 cgclassify 可以将进程附加到 cgroup,但我不想要这个。理想情况下,我需要一种方法来使用相应的 cggroup 启动实例/进程本身。

centos jboss linux-kernel cgroup
  • 1 个回答
  • 104 Views
Martin Hope
Abc Xyz
Asked: 2015-09-04 19:02:06 +0800 CST

Cgroups,限制每个用户的内存

  • 2

是否可以限制每个用户而不是每个组的内存使用量?

这是我的配置...

/etc/cgconfig.conf

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}
group small {
        cpu {
                cpu.shares="100";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="200M";
                memory.memsw.limit_in_bytes="200M";
        }
}

/etc/cgrules.conf

@guests      cpu,cpuacct,memory      small
user1        cpu,cpuacct,memory      small
user2        cpu,cpuacct,memory      small

现在我只看到一个选项来创建组 small1 并将 user1 链接到该组,然后将 user2 链接到 small2 等等,如下所示:

/etc/cgconfig.conf

group small1 {
        cpu {
                cpu.shares="100";
...
group small2 {
        cpu {
                cpu.shares="100";
...

/etc/cgrules.conf

user1        cpu,cpuacct,memory      small1
user2        cpu,cpuacct,memory      small2

有人知道更好的方法吗?

cgroup
  • 1 个回答
  • 8089 Views
Martin Hope
HFLW
Asked: 2012-07-18 08:23:08 +0800 CST

在 Linux 上限制进程的网络访问?

  • 2

我一直在研究如何对进程进行沙盒处理,并且遇到了看起来很有希望的 cgroups。我对为此使用虚拟化或 strace 不太感兴趣,因为我希望程序尽可能快地运行。我也知道 SELinux/AppArmor,但我正在寻找尽可能不需要内核补丁的东西。

我知道 cgroups 可用于限制 cpu/mem 使用和文件系统访问,但它能否用于防止进程打开套接字或绑定到端口?或者,有什么东西可以与 cgroups 结合使用来限制网络访问吗?能够分别限制每个人会很棒。

再次感谢!

linux linux-networking cgroup
  • 1 个回答
  • 1324 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve