Virmach 24刀机器! 4核心 tos里写的限制使用率不能长时间超过50% 那么有什么办法让系统只用2个核心吗?那样的话不是跑满2核也没事了!请问各位技术大佬!这个怎么实现?
江西网友:我不懂技术,路过。
吉林网友:
docker 指定cpu限制规则即可
以docker-compose配置为例
deploy:
resources:
limits:
cpus: ‘0.001’
memory: 50M
reservations:
cpus: ‘0.0001’
memory: 20M
就行了
广西网友:有没有启动的时候限制成双核心的~软件的限制总感觉不靠谱
湖北网友:什么是绑核
所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity)。设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行。但并不是说该进程/线程就独占这个CPU的核,其他的进程/线程还是可以在这个核上面运行的。如果想要实现某个进程/线程独占某个核,就要使用cpuset命令去实现。
其实,很多情况下,为了提高性能,Linux调度器会自动实现尽量让某个进程/线程在同样的CPU上去运行。所以,除非必须,我们没有必要显式的去进行进程绑核操作。
如何绑核
taskset用于将某个进程/线程绑定到CPU的某个或某几个核上面,其用法如下:
Bash
taskset -p pid
可以查出进程pid现在的绑核情况。
设置绑核有两种方法:
列表形式
掩码形式
下面分别介绍。
列表形式
列表形式指直接指定要绑的CPU核的列表,列表中可以有一个或多个核。具体语法如下:
Bash
taskset -cp cpu-list pid
其中cpu-list是数字化的cpu列表,从0开始。多个不连续的cpu可用逗号连接,连续的可用短现连接,比如0,2,5-11等。
比如:
taskset -cp 0,2,5-11 9865
命令表示将进程9865绑定到#0、#2、#5~#11号核上面。
最后要说的是:只要taskset成功返回了,那就表示绑核一定成功了,即该进程已被绑到指定的核上面,而且taskset命令会显示原来的绑核(原来的可能是系统默认分配的核)情况,以及新的绑核情况。
掩码形式绑核
将掩码转换为二进制形式,从最低位到最高位代表物理CPU的#0、#1、……、#n号核。某位的值为0表示不绑该核,1表示绑。比如:0x00000001的二进制为0000…0001,只有第0号核的位置是1,所以表示只绑0号核;0x00000003的二进制为0000…0011,第0和1号核的位置是1,所以表示绑CPU的0号和1号核;再比如0xFFFFFFFF的二进制为1111…1111,所有32个核的位置都为1,所以表示绑CPU的0~31核。
需要注意的是,并非掩码中给出的CPU核就一定会存在,比如0x00000400理论上代表CPU的第10号核,但是该核在真正的计算机上面并不一定是存在的。而且,如果我们试图将物理上并不存的核绑定给某个进程时,会返回错误。掩码形式的绑核命令为:
Bash
taskset -p mask pid
/////
方法2
进入vim /boot/grub2/grub.cfg
在文件中加入isolcpus=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
注:此处我们的服务器为24核,上述操作限制进程最多使用2核
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="–id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/10_linux ###
menuentry ‘CentOS Linux, with Linux 3.10.0-123.el7.x86_64’ –class centos –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-3.10.0-123.el7.x86_64-advanced-a8a1e46a-0eee-4d56-835c-ff02f7af023f’ {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root=’hd0,msdos1′
if [ x$feature_platform_search_hint = xy ]; then
search –no-floppy –fs-uuid –set=root –hint-bios=hd0,msdos1 –hint-efi=hd0,msdos1 –hint-baremetal=ahci0,msdos1 –hint=’hd0,msdos1′ 99d03aa5-8e0d-44de-9c03-0d867ed7560e
else
search –no-floppy –fs-uuid –set=root 99d03aa5-8e0d-44de-9c03-0d867ed7560e
fi
linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=a8a1e46a-0eee-4d56-835c-ff02f7af023f ro rd.lvm.lv=centos/swap nomodeset crashkernel=auto vconsole.keymap=us vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 isolcpus=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
initrd16 /initramfs-3.10.0-123.el7.x86_64.img
}
menuentry ‘CentOS Linux, with Linux 0-rescue-d5097210fc6b465f8fb25de0f481757c’ –class centos –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-0-rescue-d5097210fc6b465f8fb25de0f481757c-advanced-a8a1e46a-0eee-4d56-835c-ff02f7af023f’ {
load_video
insmod gzio
insmod part_msdos
insmod xfs
set root=’hd0,msdos1′
if [ x$feature_platform_search_hint = xy ]; then
search –no-floppy –fs-uuid –set=root –hint-bios=hd0,msdos1 –hint-efi=hd0,msdos1 –hint-baremetal=ahci0,msdos1 –hint=’hd0,msdos1′ 99d03aa5-8e0d-44de-9c03-0d867ed7560e
else
search –no-floppy –fs-uuid –set=root 99d03aa5-8e0d-44de-9c03-0d867ed7560e
fi
linux16 /vmlinuz-0-rescue-d5097210fc6b465f8fb25de0f481757c root=UUID=a8a1e46a-0eee-4d56-835c-ff02f7af023f ro rd.lvm.lv=centos/swap nomodeset crashkernel=auto vconsole.keymap=us vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root rhgb quiet isolcpus=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
initrd16 /initramfs-0-rescue-d5097210fc6b465f8fb25de0f481757c.img
}
if [ "x$default" = ‘CentOS Linux, with Linux 3.10.0-123.el7.x86_64′ ]; then default=’Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64’; fi;
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the ‘exec tail’ line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
新疆网友:cpus-set 可以指定具体用哪些核心0-xxx
docker 本身就是启动时生效啊
山东网友:这个看着好专业啊
安徽网友:发工单让他们帮你改成2核独享
青海网友:可以吗