linux上cgconfig服务,linux系统调优-Cgroups
一.cgconfig 設計限制策略
Cgroups這個是被cgconfig服務所控制的。如果此服務沒有啟動,在根目錄下的cgroup文件夾里就不會存在內容。
1.安裝cgroup
yum install libcgroup
2.# /etc/init.d/cgconfig status? 查看cgroup的狀態,如果沒有啟動,則不會有/cgroup目錄
3.# /etc/init.d/cgconfig start
4.vim /etc/cgconfig.conf? 可以修改cgroup的配置文件,將cpu與memory的信息合并。
mount {
cpuset? = /cgroup/cpuset;
#?????? cpu???? = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
#?????? memory? = /cgroup/memory;
cpu???? = /cgroup/cpumem;
memory? = /cgroup/cpumem;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio?? = /cgroup/blkio;
5.# /etc/init.d/cgconfig restart????? 重新啟動cgroup,可以在/cgroup/目錄下發現cpumem目錄文件,原來的cpu,memory目錄失效,里面無內容。
注意:重啟cgconfig時需退出cgroup目錄再重啟
cgred 將需要限制的程序應用到cgroup中
6.# lssubsys -m? 查看當前系統已掛載的子系統
cpuset /cgroup/cpuset
cpu /cgroup/cpu
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio
二.cpu管理
1.#vim /etc/cgconfig.conf
在配置文件中追加兩個組
group lesscpu{???? #占用cpu較小的組
cpu{
}
}
group morecpu{?? #占用cpu較多的組
cpu{
}
}
2.#/etc/init.d/cgconfig restart 重新啟動配置文件
3.#cd /cgroup/cpu/
ls
可以看到多出兩個目錄文件 lesscpu,morecpu。
lesscpu,morecpu目錄文件中的內容與父cpu目錄中的內容完全一樣。
4.# cat /cgroup/cpu/cpu.shares? 查看cpu父親目錄cpu.shares的大小為1024
1024
5.#vim /etc/cgconfig.conf
group lesscpu{
cpu{
cpu.shares=100;? 根據父cpu的cpu.shares來設定,當發生資源搶占時,有大約1/10的搶占幾率
}
}
group morecpu{
cpu{
cpu.shares=200; 有大約2/10的搶占幾率
}
6.#/etc/init.d/cgconfig restart 重新啟動配置文件
7.#cat /cgroup/cpu/lesscpu/cpu.shares
100
可以看到lesscpu的cpu.share已經發生改變
8.如果有多個個cpu在運行,可以關閉掉一定數目的cpu
(1)查看cpu運行狀況
#lscpu
Architecture:????????? x86_64
CPU op-mode(s):??????? 32-bit, 64-bit
Byte Order:??????????? Little Endian
CPU(s):??????????????? 4
On-line CPU(s) list:?? 0-3? 可以看到在線活躍的cpu號為0到3
(2)]# cat /sys/devices/system/cpu/cpu1/online? 查看cpu1的在線狀況為1
1
注:cpu0默認不能關閉
(3)# echo 0 >> /sys/devices/system/cpu/cpu1/online
(4)# lscpu
Architecture:????????? x86_64
CPU op-mode(s):??????? 32-bit, 64-bit
Byte Order:??????????? Little Endian
CPU(s):??????????????? 4
On-line CPU(s) list:?? 0,2,3
Off-line CPU(s) list:? 1? 可以看到已經成功關閉cpu1
9.使用cpu進行控制進程運行
(1)]# cgexec -g cpu:lesscpu time dd if=/dev/zero of=/dev/null bs=1M count=200000
200000+0 records in
200000+0 records out
209715200000 bytes (210 GB) copied, 19.2698 s, 10.9 GB/s
0.01user 9.60system 0:19.27elapsed 49%CPU (0avgtext+0avgdata 7600maxresident)k
0inputs+0outputs (0major+516minor)pagefaults 0swaps
(2)# cgexec -g cpu:morecpu time dd if=/dev/zero of=/dev/null bs=1M count=200000
200000+0 records in
200000+0 records out
209715200000 bytes (210 GB) copied, 14.4771 s, 14.5 GB/s
0.01user 9.61system 0:14.47elapsed 66%CPU (0avgtext+0avgdata 7600maxresident)k
0inputs+0outputs (0major+518minor)pagefaults 0swaps
如圖,可以看到使用morecpu策略的進程消耗的資源是lesscpu的兩倍
應用場景:當服務器有一個大型的應用程序運行時,可以給其900的cpu資源,當沒有其它進程與它競爭時,它可以滿負載運行,當有資源競爭時,給它大約90%cpu資源使用率,避免機器的卡死。
三.memory管理
1.使用系統自帶的tmpfs文件系統,
(1)創建臨時目錄
# mkdir /mnt/tmpfs/
(2)將tmpfs文件系統掛載在/mnt/tmpfs/目錄下
# mount -t tmpfs none /mnt/tmpfs/
(3)查看掛載情況
# df
Filesystem?????????????????? 1K-blocks??? Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root?? 6926264 1360608?? 5213812? 21% /
tmpfs?????????????????????????? 251136?????? 0??? 251136?? 0% /dev/shm
/dev/sda1?????????????????????? 495844?? 33463??? 436781?? 8% /boot
none??????????????????????????? 251136?????? 0??? 251136?? 0% /mnt/tmpfs
掛載的內存盤大小實際是系統剩余的內存大小,現在往/mnt/tmpfs里面寫東西實際是往內存中寫入
2.添加內存管理信息
# vim /etc/cgconfig.conf
group poormem{
memory{
memory.limit_in_bytes=134217728;
}
}
3.# /etc/init.d/cgconfig restart
4.cd /mnt/tmpfs
(1)
<1>[root@desktop113 tmpfs]# cgexec -g memory:poormem dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0327344 s, 3.2 GB/s
<2>[root@desktop113 tmpfs]# free
total?????? used?????? free???? shared??? buffers???? cached
Mem:??????? 502272???? 273880???? 228392????????? 0?????? 8712???? 154364
-/+ buffers/cache:???? 110804???? 391468
Swap:?????? 835576????????? 0???? 835576
由于前面限制的內存大小是100M,所以內存夠用,沒有使用到交換分區
(2)
<1>[root@desktop113 tmpfs]# cgexec -g memory:poormem dd if=/dev/zero of=test bs=1M count=1000
dd: writing `test': No space left on device
246+0 records in
245+0 records out
257163264 bytes (257 MB) copied, 0.736284 s, 349 MB/s
<2>[root@desktop113 tmpfs]# free
total?????? used?????? free???? shared??? buffers???? cached
Mem:??????? 502272???? 302036???? 200236????????? 0?????? 8712???? 118248
-/+ buffers/cache:???? 175076???? 327196
Swap:?????? 835576???? 184856???? 650720
當往內存中寫入1G的數據時可以看到雖然內存只使用了限制的大小,但是交換分區swap被使用了
5.繼續進行限制,不允許使用交換分區大小
(1)# vim /etc/cgconfig.conf
group poormem{
memory{
memory.limit_in_bytes=134217728;
memory.memsw.limit_in_bytes=134217728;?? 物理內存加交換分區大小
}
(2)# /etc/init.d/cgconfig restart
注意:必須退出cgroup目錄再進行重啟,不然會有報錯的
(3)[root@desktop113 tmpfs]# cgexec -g memory:poormem dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.032748 s, 3.2 GB/s
當寫入100M的數據時,是在系統限制內的,所以可以順利執行
(4)[root@desktop113 tmpfs]# cgexec -g memory:poormem dd if=/dev/zero of=test bs=1M count=1000
Killed
當寫入1G的數據時,進程是被拒絕的
(5)實驗完畢后,可以卸載掉tmpfs
# umount /mnt/tmpfs/
四.freezer冷凍進程管理
1.# vim /etc/cgconfig.conf
group stopit{
freezer{
}
}
# /etc/init.d/cgconfig restart
2.ps ax
1480 pts/0??? S+???? 0:00 top
3.將top添加到freezer的任務列表里
# echo 1480 > /cgroup/freezer/stopit/tasks
4.冷凍top進程
# echo FROZEN > /cgroup/freezer/stopit/freezer.state
進行刷新操作top命令無反應
5.解凍top進程
# echo THAWED > /cgroup/freezer/stopit/freezer.state
總結
以上是生活随笔為你收集整理的linux上cgconfig服务,linux系统调优-Cgroups的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx系列教程(07) - Loca
- 下一篇: win10同时安装wps和office时