一、调整系统的共享内存上限
今天遇到创建32个大小为100MB的共享内存失败。
原因是创建的共享内存总大小超过了系统允许的共享内存上限。
查询系统共享内存上限的命令是 ipcs -l
:
[ops@g-null kernel]$ ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 3139174
max total shared memory (kbytes) = 3139172
min seg size (bytes) = 1
------ Semaphore Limits --------
略
------ Messages: Limits --------
略
可以看到允许申请的共享内存段数是4096,每个共享内存段最大3139174KB,系统共享内存总和的上限是3139172。
是”max total shared memory“这一项超限了,需要把这个值调大。
方法是设置内核参数 kernel.shmall
// 因为kernel.shmall 的单位是 page,所以要除以page_size
[ops@gzqc12-null-192-gzqc12-172_28_12_192-null kernel]$ getconf PAGE_SIZE
4096
// 假设我想把上限调成 5GB, 5 * 1024 * 1024 * 1024 / 4096 = 1310720
[ops@gzqc12-null-192-gzqc12-172_28_12_192-null sysctl -w kernel.shmall=1310720
详见:https://www.cnblogs.com/dkblog/archive/2011/09/06/2168721.html
这里有点坑,sysctl -w 的方式只是临时修改,重启后仍会失效。 永久修改的方法是,vi /etc/sysctl.conf
[root@vaqc-172_25_32_40-null log]# cat /etc/sysctl.conf
net.core.wmem_default = 2097152
net.core.rmem_default = 2097152
net.ipv4.tcp_rmem = 4096 2048000 4194304
net.ipv4.tcp_wmem = 4096 2048000 4194304
net.core.rmem_max = 51200000
net.core.wmem_max = 51200000
net.core.somaxconn = 1024
vm.overcommit_memory = 1
kernel.msgmnb = 20971520
kernel.msgmax = 65536
kernel.shmmax = 3212836864
kernel.shmall = 2097152 #把这一项改成 2097152,也就是 8GB/4096KB
kernel.panic = 5
二、如何查看系统CPU占用
在top命令启动后,按大写的 P 可以对进程按cpu使用率排序。(顺便一提:大写M则是按内存占用排序)
在top命令启动后,按数字键 1 可以显示各核心的使用率
在top命令启动后,按小写 m 可以显示系统内存使用统计
三、查看CPU核数、算力等
[root@gzqc-172_24_28_115-null kernel]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8 //核心数
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Stepping: 5
CPU MHz: 2494.140 //频率
BogoMIPS: 4988.28 //算力
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
L3 cache: 36608K
NUMA node0 CPU(s): 0-7