kernel编译与优化
编译内核的步骤:
1.清除旧目标文件和配置(make mrproper)
2.配置内核选项 ①文本配置界面(make confi)②文本菜单界面(make menuconfig)③图形界面make xconfi编译前的操作#yum install qt qt-deve)
推荐使用:文本菜单方式(make menuconfig)
菜单选项功能,根据生产环境进行配置:
我们以kernel-3.6.0为例:
图形:
General setup ---> # 普通安装
[*] Enable loadable module support ---> # 是否支持外挂模块的功能
-*- Enable the block layer ---> #块设备
Processor type and features ---> #cpu的类型和功能(主要修改选项)
Processor type and features:子菜单:
Processor family (Generic-x86-64):选择cpu的类型
Power management and ACPI options ---> #电源管理
Bus options (PCI etc.) ---> #pci总线的配置
Executable file formats / Emulations ---> #可执行二进制文件格式
-*- Networking support ---> #网络配置
Device Drivers ---> #驱动
Firmware Drivers ---> #固件驱动
File systems ---> #文件系统
Kernel hacking ---> #内核debug
Security options ---> #安全相关选项
-*- Cryptographic API ---> #加密api
[*] Virtualization ---> #校验码选项
Library routines --->
Load an Alternate Configuration File
Save an Alternate Configuration File
3.编译内核(make)
4.编译内核模块(make modules)
5.安装内核模块(make modules_install)
6.安装新内核(make install)
【常用kernel参数的优化】
小知识:
忽略ping echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
允许ping sysctl -w net.ipv4.icmp_echo_ignore_all
永久生效 echo net.ipv4.icmp_echo_ignore_all = 1 >>/etc/sysctl.conf
内存参数:
ls /proc/sys/kernel/shmmax
1.共享内存参数:
sysctl -a |grep shm
vm.hugetlb_shm_group = 0
kernel.shmmnl = 4096 #可用的最大的共享内存段(单位:段)
kernel.shmall = 2097152 #可以使用的内存(单位:页)
kernel.shmmax = 33554432 #一个共享内存段里最多可以使用的大小(默认:32M)
调整内存段的大小:
echo kernel.shmmax=2147483648 >>/etc/sysctl.conf #调整内存段的大小为2G
2.信号量优化:
sysctl -a |grep sem
# 集合数#可用的最多信号量 #每个信号量可用的操作数 #每一个集合里德信号量
kernel.sem = 250 32000 128 128 #根据生产环节进行适量调整
echo kernel.sem = 250 32000 128 128 >>/etc/sysctl.conf
3.文件的句柄(同时打开的文件个数)
cat /proc/sys/fs/file-max
#默认 32767 #最多打开的文件数
查看系统的文件句柄数的使用情况:
cat /proc/sys/fs/file-nr
#初始化分配的句柄数 #目前系统正在使用的句柄数 #最大句柄数
256 0 32767 #当前使用的文件句柄数接近最大值需要改动句柄值
echo fs.file-max=65536 >>/etc/sysctl.conf #最多支持打开65536个文件
4.缓冲区队列
sysctl -a |grep mem
vm.overcommit_memory = 0
vm.nr_hugepages_mempolicy = 0
vm.lowmem_reserve_ratio = 256 256 32
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
net.core.wmem_max = 229376
net.core.rmem_max = 229376
net.core.wmem_default = 229376
net.core.rmem_default = 229376
net.core.optmem_max = 20480
net.ipv4.igmp_max_memberships = 20
net.ipv4.tcp_mem = 20358 27144 40716 #整个系统的缓冲区单位(页面x4096)#最小缓冲4kb #平均值 #最大值
net.ipv4.tcp_wmem = 4096 16384 868608 #发送缓冲区#最小缓冲4kb #平均值 #最大值
net.ipv4.tcp_rmem = 4096 87380 868608 #接受缓冲区#最小缓冲4kb #平均值 #最大值
net.ipv4.udp_mem = 20358 27144 40716
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
根据生产环境进行调整
echo net.ipv4.tcp_mem = 20358 27144 40716 >>/etc/sysctl.conf
echo net.ipv4.tcp_wmem = 4096 16384 868608 >>/etc/sysctl.conf
echo net.ipv4.tcp_rmem = 4096 87380 868608 >>/etc/sysctl.conf
echo net.ipv4.udp_mem = 20358 27144 40716 >>/etc/sysctl.conf
syn缓冲区:
net.ipv4.tcp_max_syn_backlog=2048 #缓冲区域大小
net.ipv4.tcp_synack_retries=3 #syn重试次数
net.ipv4.tcp_syn_retries=3 #syn重试次数