标签: cgroups

KVM和LXC之间的区别

KVM和Linux容器(LXC)有什么区别?对我来说,如果我们同时使用内核的"命名空间"和"控制组"功能,那么LXC也是在同一内核中创建多个虚拟机的一种方式.

kvm linux-kernel lxc cgroups linux-namespaces

40
推荐指数
3
解决办法
3万
查看次数

限制Docker容器上的内存不起作用

我在Ubuntu 13.04(Raring Ringtail)上运行最新版本的Docker:

root@docker:~# docker version
Client version: 0.6.6
Go version (client): go1.2rc3
Git commit (client): 6d42040
Server version: 0.6.6
Git commit (server): 6d42040
Go version (server): go1.2rc3
Last stable version: 0.6.6
Run Code Online (Sandbox Code Playgroud)

但是当我启动容器时,

root@docker:~# docker run -m=1524288 -i  -t ubuntu /bin/bash
root@7b09f638871a:/# free -m
             total       used       free     shared    buffers     cached
Mem:          1992        608       1383          0         30        341
-/+ buffers/cache:        237       1755
Swap:         2047          0       2047
Run Code Online (Sandbox Code Playgroud)

我没有看到任何限制,我的内核启用了cgroups内存限制:

kernel /boot/vmlinuz-3.8.0-33-generic ro console=tty0 root=/dev/xvda1 cgroup_enable=memory swapaccount=1
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么明显的东西?

ubuntu cgroups docker

39
推荐指数
2
解决办法
5万
查看次数

Android进程调度

我正在努力获得更好的理解,因此我可以在创建Android应用程序/服务时确定潜在互操作性问题的可靠性影响范围.我想弄清楚如何确定进程优先级.服务和活动之间的优先级差异以及调度程序是否以不同方式处理其优先级.基本上我正在努力深入了解一个活动或服务被来自不同应用程序(甚至是Linux内核)的流氓进程所匮乏的可能性.

有没有人有你可以推荐的任何好的链接...我的搜索还没有发现太多.

谢谢!

编辑:我关心的是处理器时间切片/调度,而不是内存资源(内存资源在android文档中有详细描述.)再次感谢!

multithreading android scheduler dalvik cgroups

35
推荐指数
3
解决办法
2万
查看次数

弹性搜索最大虚拟内存区域vm.max_map_count [65530]太低,至少增加[262144]

我有一个针对ElasticSearch的systemd配置的问题.

[Unit]
Description=platform-elasticsearch
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
User={{ app_user }}
Group={{ app_group }}
Environment=ES_PATH_CONF=/platform/opt/elasticsearch-{{ elasticsearch.version }}/config
Environment=JAVA_HOME=/platform/opt/jdk{{ jdk.major_version }}_{{ jdk.minor_version }}
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=100000
LimitMEMLOCK=100000
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/platform/var/app/elasticsearch
ExecStart=/platform/opt/elasticsearch-{{ elasticsearch.version }}/bin/elasticsearch
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s -TERM $MAINPID
TimeoutStopSec=60
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143 0
Type=simple
Restart=on-failure
RestartSec=10
PIDFile=/platform/var/run/elasticsearch.pid

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这似乎不允许我配置vm.max_map_count设置.

Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,359][INFO ][o.e.b.BootstrapChecks    ] [1oQJNUK] bound or publishing to a non-loopback     address, …
Run Code Online (Sandbox Code Playgroud)

limit elasticsearch cgroups systemd

28
推荐指数
10
解决办法
3万
查看次数

如何在 WSL2 中启用 cgroup v2?

访问仅具有 Windows 计算机的支持 cgroup v2 的系统的最简单方法是生成托管 Ubuntu 22.04 的 WSL2 实例。不幸的是,有一个问题。删除 v1 控制器不会导致该控制器添加到 v2 层次结构中。

默认情况下,WSL2 同时启用cgroup v1cgroup v2层次结构,所有控制器都位于v1中:

$ mount -l | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup …
Run Code Online (Sandbox Code Playgroud)

ubuntu cgroups windows-subsystem-for-linux

22
推荐指数
1
解决办法
1万
查看次数

内存使用率差异:cgroup memory.usage_in_bytes与docker容器内的RSS

"Kubernetes"(v1.10.2)说我的pod(包含一个容器)使用大约5GB的内存.在容器内部,RSS更像是681MiB.可以解释如何使用以下数据从681MiB到5GB(或者描述如何从容器或在kubernetes中运行此容器的docker主机中省略的另一个命令来弥补差异)?

kubectl top pods说5GB:

% kubectl top pods -l app=myapp
NAME                             CPU(cores)   MEMORY(bytes)
myapp-56b947bf6d-2lcr7           39m          5039Mi
Run Code Online (Sandbox Code Playgroud)

Cadvisor报告了一个相似的数字(可能来自略有不同的时间,所以请忽略小的差异):

container_memory_usage_bytes{pod_name=~".*myapp.*"}      5309456384

5309456384 / 1024.0 / 1024 ~= 5063 ~= 5039
Run Code Online (Sandbox Code Playgroud)

在容器内部,此文件似乎是cadvisor获取其数据的位置:

% kubectl exec -it myapp-56b947bf6d-2lcr7 bash
meme@myapp-56b947bf6d-2lcr7:/app# cat /sys/fs/cgroup/memory/memory.usage_in_bytes
5309456384
Run Code Online (Sandbox Code Playgroud)

容器内的驻留集大小(RSS)不匹配(小于1GB):

meme@myapp-56b947bf6d-2lcr7:/app# kb=$(ps aux | grep -v grep | grep -v 'ps aux' | grep -v bash | grep -v awk | grep -v RSS | awk '{print $6}' | awk '{s+=$1} END {printf "%.0f", s}'); mb=$(expr $kb / 1024); printf …
Run Code Online (Sandbox Code Playgroud)

memory cgroups docker kubernetes cadvisor

18
推荐指数
2
解决办法
3183
查看次数

当Docker容器的PID1退出时,其他进程会发生什么?

考虑以下内容,它sleep 60在后台运行然后退出:

$ cat run.sh 
sleep 60&
ps
echo Goodbye!!!
$ docker run --rm -v $(pwd)/run.sh:/run.sh ubuntu:16.04 bash /run.sh
  PID TTY          TIME CMD
    1 ?        00:00:00 bash
    5 ?        00:00:00 sleep
    6 ?        00:00:00 ps
Goodbye!!!
Run Code Online (Sandbox Code Playgroud)

这将启动一个Docker容器,bash作为PID1.然后fork/execs一个sleep进程,然后bash退出.当Docker容器死亡时,该sleep过程也会以某种方式死亡.

我的问题是:该sleep过程被杀死的机制是什么?我试图陷入SIGTERM一个子进程,似乎没有被绊倒.我的假设是,SIGKILL当关闭容器正在使用的cgroup时,某些东西(Docker或Linux内核)正在发送,但我发现没有任何文档可以澄清这一点.

编辑我最接近解释的是baseimage-docker的以下引用:

如果您的init进程是您的应用程序,那么它可能只关闭自己,而不是容器中的所有其他进程.然后,内核将强制终止其他进程,而不是让他们有机会正常关闭,可能导致文件损坏,过时的临时文件等.您真的想要优雅地关闭所有进程.

因此,至少根据这一点,暗示当容器退出时,内核将向所有剩余进程发送SIGKILL.但是我仍然希望明确它如何决定这样做(即,它是cgroups的一个特征吗?),理想情况下,一个更权威的来源会很好.

linux cgroups docker

15
推荐指数
1
解决办法
1954
查看次数

为什么当进度允许内存超过cgroup限制时,cgroup的内存子系统使用oom-killer而不是返回内存分配失败?

我们使用cgroup limit procedure使用更多的资源.但是,当内存超过cgroup的限制时,它会终止进程.为什么cgroup的内存子系统使用oom-killer而不是返回内存分配失败当进度允许内存超过cgroup限制时?

linux redhat linux-kernel cgroups

14
推荐指数
1
解决办法
3975
查看次数

kubelet无法获得docker和kubelet服务的cgroup统计信息

我在裸机Debian上运行kubernetes(3个主人,2个工人,现在是PoC).我跟着k8s-hard-way,我在我的kubelet上遇到了以下问题:

无法获取"/system.slice/docker.service"的系统容器统计信息:无法获取"/system.slice/docker.service"的cgroup统计信息:无法获取"/system.slice/docker.service"的cgroup统计信息":无法获取"/system.slice/docker.service"的容器信息:未知容器"/system.slice/docker.service"

我对kubelet.service也有同样的信息.

我有一些关于这些cgroup的文件:

$ ls /sys/fs/cgroup/systemd/system.slice/docker.service
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

$ ls /sys/fs/cgroup/systemd/system.slice/kubelet.service/
cgroup.clone_children  cgroup.procs  notify_on_release  tasks
Run Code Online (Sandbox Code Playgroud)

管理员告诉我:

$ curl http://127.0.0.1:4194/validate
cAdvisor version: 

OS version: Debian GNU/Linux 8 (jessie)

Kernel version: [Supported and recommended]
    Kernel version is 3.16.0-4-amd64. Versions >= 2.6 are supported. 3.0+ are recommended.


Cgroup setup: [Supported and recommended]
    Available cgroups: map[cpu:1 memory:1 freezer:1 net_prio:1 cpuset:1 cpuacct:1 devices:1 net_cls:1 blkio:1 perf_event:1]
    Following cgroups are required: [cpu cpuacct]
    Following other …
Run Code Online (Sandbox Code Playgroud)

cgroups kubernetes

12
推荐指数
2
解决办法
1万
查看次数

为什么 Podman 使用不同的 UID 报告“命名空间中没有足够的可用 ID”?

事实:

  1. 无根 podman 非常适合 uid 1480
  2. 无根 podman 因 uid 而失败 2088
  3. CentOS 7
  4. 核心 3.10.0-1062.1.2.el7.x86_64
  5. 播客版本 1.4.4
  6. 几乎整个环境都被移除了两者之间
  7. 的文件系统/tmpxfs
  8. capsh两个用户的输出是相同的,但对于 uid / username
  9. 两个 UID 在/etc/sub{u,g}id文件中都有相同的条目
  10. $HOME/.config/containers/storage.conf是默认值,除了 uids 之外,两者是相同的。在storage.conf下面参考。

我编写了以下 shell 脚本来演示两者运行的环境有多么相似:

#!/bin/sh
for i in 1480 2088; do
  sudo chroot --userspec "$i":10 / env -i /bin/sh <<EOF
echo -------------- $i ----------------
/usr/sbin/capsh --print
grep "$i" /etc/subuid /etc/subgid
mkdir /tmp/"$i"
HOME=/tmp/"$i"
export HOME
podman --root=/tmp/"$i" info > /tmp/podman."$i"
podman …
Run Code Online (Sandbox Code Playgroud)

containers centos cgroups linux-namespaces podman

11
推荐指数
2
解决办法
7747
查看次数