首页 > 编程知识 正文

environment variable path,netlink linux

时间:2023-05-06 12:46:23 阅读:155146 作者:4684

满意的回答

hhl117

2016.09.11

合格率: 44%等级: 10

帮助: 1173人

在测试中使用Cgroup和Namespace (

在许多情况下,需要测试程序在资源受限的情况下的行为。 常见的方法可能是继续向系统施加压力,以减少可以分配给目标程序的资源。 换句话说,您可以尝试限制分配给目标程序的资源总数,以便在计算机运行状况良好时使程序资源使用饱和。

作为做容器项目的人,我知道容器技术是通过Cgroup和Namespace实现的。 在容器中,cpu和内存资源由Cgroup控制,PID、IPC和网络等资源由Namespace分隔。 即使没有将程序部署到容器中,也可以完成一些异常测试,包括使用Cgoup和Namespace构建场景,并使用Cgroup的资源控制功能进行资源满载测试。 利用Namespace的资源隔离特性,在不影响其他程序运行的情况下进行一些网络异常测试。

小组介绍

Cgroup是进行分组管理的Linux内核功能,具体资源管理通过子系统进行。 子系统可以理解为资源控制器,各种子系统是资源的分配器。 例如,cpu子系统控制cpu时间的分配,并如下使用

安装(ubuntu )

#apt-get install cgroup-bin

基本命令

cgclassify -- cgclassify命令用于将正在运行的任务移动到一个或多个cgroup。

cgclear -- cgclear命令用于删除层次结构中的所有cgroup。

CG config.conf--在CG config.conf文件中定义cgroup。

cgconfigparser -- cgconfigparser命令分析cgconfig.conf文件并挂载级别。

cgcreate -- cgcreate在层次中创建新的cgroup。

cgdelete -- cgdelete命令删除指定的cgroup。

cgexec -- cgexec命令在指定的cgroup上执行任务。

cgget -- cgget命令显示cgroup参数。

cgred.conf -- cgred.conf是cgred服务的配置文件。

cgrules.conf -- cgrules.conf包含用于确定何时使用特定cgroup的任务术语的规则。

cgrulesengd -- cgrulesengd在cgroup上公开任务。

cgset -- cgset命令设置cgroup的参数。

LSC组--LSC组命令列出层次结构中的cgroup。

lssubsys -- lssubsys命令列出包含指定子系统的级别

子系统说明

使用lssubsys -a,系统所支持的种子系统的数目和例如cpu控制cpu的时间片,而存储器控制存储器的使用

#lssubsys -a

cpuset

cpu,cpuacct

埃默里

戴维斯

freezer

net_cls,net_prio

blkio

perf_event

hugetlb

的主要子系统如下所示。

名为blkio的子系统设置限制每个块设备的输入和输出控制。 例如:盘、CD、usb等。

名为cpu的子系统使用调度程序为cgroup任务提供cpu的访问。

cpuacct生成cgroup任务的cpu资源报告。

对于cpuset多核cpu,此子系统为cgroup任务分配单独的cpu和内存。

允许或拒绝cgroup任务对设备的访问。

freezer暂停并重新开始cgroup任务。

内存设置每个cgroup的内存限制并生成内存资源报告。

net_cls标记每个网络数据包以方便cgroup使用。

ns名称空间子系统

perf_event:添加了按组监视和跟踪功能,以便可以监视属于特定组的所有线程和在特定CPU上运行的线程

要为Cgroup分配受限制的资源,必须先装载子系统,然后才能拥有控制组。 例如,如果要对目标程序施加内存限制,则需要挂载内存子系统

使用lssubsys -am查看已装载的子系统

#lssubsys -am

cpuset /sys/fs/cgroup/cpuset

cpu、cpuacct /sys/fs/cgroup/cpu、cpuacct

memory /sys/fs/cgroup/memory

戴维斯

s /sys/fs/cgroup/devices

freezer /sys/fs/cgroup/freezer

net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio

blkio /sys/fs/cgroup/blkio

perf_event /sys/fs/cgroup/perf_event

hugetlb /sys/fs/cgroup/hugetlb

可以手动挂载或者卸载子系统,如执行umount /sys/fs/cgroup/memory,memory子系统就被卸载了,这时候手动执行# mount -t cgroup -o memory memory /sys/fs/cgroup/memory就又挂载上了。

要确保需要的子系统都挂上了,不然创建控制组的时候会报错 is not mounted

#cgcreate -g memory,cpu:/hzmali_test

cgcreate: can't create cgroup /hzmali_test: Cgroup one of theneeded subsystems is not mounted

如何创建control group(即需要资源管理的组)呢, 这里用cgcreate命令,当然也有其他方法, 如cgconfig.conf等

#cgcreate -g memory,cpu:/hzmali_test

这里有个重要特性:一个组可以同时做多个资源的限制,如这里我同时限制了memory和cpu,然后memory和cpu子系统目录下会自动生成这个组的目录和些文件,如memory

#/sys/fs/cgroup/memory/hzmali_test$ ls -lrt

-rw-r--r-- 1 root root 0 Jul 26 20:56 tasks

-rw-r--r-- 1 root root 0 Jul 26 20:56 notify_on_release

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.use_hierarchy

-r--r--r-- 1 root root 0 Jul 26 20:56 memory.usage_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.swappiness

-r--r--r-- 1 root root 0 Jul 26 20:56 memory.stat

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.soft_limit_in_bytes

---------- 1 root root 0 Jul 26 20:56 memory.pressure_level

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.oom_control

-r--r--r-- 1 root root 0 Jul 26 20:56 memory.numa_stat

-rw-r--r-- 1 root root 0 Jul 26 20:56memory.move_charge_at_immigrate

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.max_usage_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.limit_in_bytes

-r--r--r-- 1 root root 0 Jul 26 20:56 memory.kmem.usage_in_bytes

-r--r--r-- 1 root root 0 Jul 26 20:56memory.kmem.tcp.usage_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56memory.kmem.tcp.max_usage_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56memory.kmem.tcp.limit_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.kmem.tcp.failcnt

-r--r--r-- 1 root root 0 Jul 26 20:56 memory.kmem.slabinfo

-rw-r--r-- 1 root root 0 Jul 26 20:56memory.kmem.max_usage_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.kmem.limit_in_bytes

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.kmem.failcnt

--w------- 1 root root 0 Jul 26 20:56 memory.force_empty

-rw-r--r-- 1 root root 0 Jul 26 20:56 memory.failcnt

-rw-r--r-- 1 root root 0 Jul 26 20:56 cgroup.procs

--w--w--w- 1 root root 0 Jul 26 20:56 cgroup.event_control

-rw-r--r-- 1 root root 0 Jul 26 20:56 cgroup.clone_children

文件很多,选几个重要的讲下:

tasks 可以将想要限制资源的进程都加到这个文件中

memory.max_usage_in_bytes内存的最大使用量,用来限制资源

-memory.soft_limit_in_bytes 和 memory.limit_in_bytes 的差异是,这个限制并不会阻止进程使用超过限额的内存,只是在系统内存不足时,会优先回收超过限额的进程占用的内存,使之向限定值靠拢。

memory.oom_control

包含一个标志(0或1)来开启或者关闭cgroup的OOM killer。如果开启(1),任务如果尝试申请内存超过允许,就会被系统OOM killer终止。OOM killer在每个使用cgroup内存子系统中都是默认开启的。如果需要关闭,则可以向memory.oom_control文件写入1:

# echo 1 > /sys/fs/cgroup/memory.oom_control

如果OOM killer关闭,那么进程尝试申请的内存超过允许,那么它就会被暂停,直到额外的内存被释放

memory.mem.usage_in_bytes 当前进程内存用量,因为现在还没有进程加到组里,就是0了

memory.mem.failcnt显示内存达到限制值的次数

00分享举报

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。