鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

系统调优

OS配置调优

  • 目的

    调整系统配置选项,充分发挥系统硬件性能。

  • 方法
    具体优化项详见表1
    表1 OS配置参数

    参数名称

    参数含义

    优化建议

    配置方法

    vm.swappiness

    swap为系统虚拟内存,使用虚拟内存会导致性能下降,应避免使用。

    默认值:60

    现象:用到swap时性能明显下降

    修改建议:关闭swap内存的使用,将该参数设定为0

    执行命令:

    1
    sudo sysctl vm.swappiness=0
    

    MTU

    网卡所能通过的最大数据包的大小,调大后可以减少网络包的数量以提高效率。

    默认值:1500 Bytes

    现象:可以通过ip addr命令查看

    修改建议:网卡所能通过的最大数据包的大小设置为9000 Bytes

    1. 执行命令:
      1
      vim /etc/sysconfig/network-scripts/ifcfg-$(Interface)
      
      并增加MTU="9000"
      说明:

      ${Interface}为网口名称。

    2. 完成后重启网络服务。
      1
      service network restart
      

    pid_max

    系统默认的“pid_max”值为32768,正常情况下是够用的,但跑重量任务时会出现不够用的情况,最终导致内存无法分配的错误。

    默认值:32768

    现象:通过cat /proc/sys/kernel/pid_max查看

    修改建议:设置系统可生成最大线程数为4194303

    执行命令:

    1
    echo 4194303 > /proc/sys/kernel/pid_max
    

    file_max

    “file-max”是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,则应该增加这个值。

    默认值:13291808

    现象:通过cat /proc/sys/fs/file-max查看

    修改建议:设置系统所有进程一共可以打开的文件数量,设置为cat /proc/meminfo | grep MemTotal | awk '{print $2}'所查看到的值

    执行命令:

    1
    echo ${file-max} > /proc/sys/fs/file-max
    
    说明:

    ${file-max}为cat /proc/meminfo | grep MemTotal | awk '{print $2}' 所查看到的值。

    read_ahead

    Linux的文件预读readahead,指Linux系统内核将指定文件的某区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page fault)而阻塞。

    鉴于从内存读取比从磁盘读取要快很多,预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间,是改进磁盘读IO性能的重要优化手段之一。

    默认值:128 KB

    现象:预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间。通过/sbin/blockdev --getra /dev/sdb查看

    修改建议:通过数据预读并且记载到随机访问内存方式提高磁盘读操作,调整为8192 KB

    执行命令:

    1
    /sbin/blockdev --setra <sectors> /dev/sdb  
    
    说明:

    此处以“/dev/sdb”为例,其中<sectors>为要调整预读的值大小,建议填入8192,对所有服务器上的所有数据盘都要修改。

    I/O_Scheduler

    Linux IO调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。

    默认值:CFQ

    现象:要根据不同的存储器来设置Linux IO调度器从而达到优化系统性能

    修改建议:IO调度策略,HDD设置为deadline,SSD设置为noop

    执行命令:

    1
    echo deadline > /sys/block/sdb/queue/scheduler
    
    说明:

    此处以“/dev/sdb”为例,对所有服务器上的所有数据盘都要修改。

    nr_requests

    在Linux系统中,如果有大量读请求,默认的请求队列或许应付不过来,Linux可以动态调整请求队列数,默认的请求队列数存放在“/sys/block/hda/queue/nr_requests”文件中

    默认值:128

    现象:通过适当的调整nr_requests参数可以提升磁盘的吞吐量

    修改建议:调整硬盘请求队列数,设置为512

    执行命令:

    1
    echo 512 > /sys/block/sdb/queue/nr_requests
    
    说明:

    此处以“/dev/sdb”为例,对所有服务器上的所有数据盘都要修改。

NUMA亲和优化

  • 方法

    保证网络和存储资源均衡地分配到各个NUMA节点。

  • 目的

    此处以12块NVMe SSD和4个网口为例,均衡分配到4个NUMA节点。

    NVMe SSD编号0~11,网口名为enps0f0,enps0f1,enps0f2,enps0f3。

    1
    2
    for i in {0..11}; do echo `expr ${i} / 3` > /sys/class/block/nvme${i}n1/device/device/numa_node; done
    for j in {0..3}; do echo ${j} > /sys/class/net/enps0f${j}/device/numa_node; done