建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

正品猫粮

发帖: 19粉丝: 1

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-9-11 19:37:39 5787 1 楼主 显示全部楼层
[WEB] Memcached 1.5.12 调优指南(CentOS 7.6)


1 调优概述

1.1 Memcached介绍

性能调优涉及因素很多,从操作系统、环境配置、基础软件,到网络、算法、编译选项,充分利用硬件资源以达到最大性能是我们的最终目的。

本文档主要用于指导如何在TaiShan服务器下,对系统参数、网卡中断、Memcached配置、进程部署做适当调整,使其在某种特定场景下达到性能最优。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款高性能的分布式内存缓存服务器,通常的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

官方链接:https://memcached.org/

1.2 调优原则

在性能优化时,需要遵循一定的原则,主要有以下几个方面:

  • 对性能进行分析时,要多方面分析系统的资源瓶颈所在,如CPU利用率达到100%时,也可能是内存容量限制,导致CPU忙于处理内存调度。

  • 一次只对一个性能指标参数进行调整。

  • 分析工具本身运行可能会带来资源损耗,导致系统某方面的资源瓶颈情况更加严重,应避免或降低对应用程序的影响。

1.3 调优思路

性能调优首要要发现问题,找到性能瓶颈点,然后根据瓶颈所处层级选择优化的方法,下图介绍了Memcached的调优思路。

调优思路.jpg

调优分析思路如下:

  1. 对于服务端的问题,需要重点定位的硬件指标包括CPU、内存、硬盘、BIOS配置,其中CPU是需要重点关注的:服务端虚拟机CPU未压满或存在明显热点函数直接影响最终测试结果,需要注意的是虚拟机的CPU是否压满是在虚拟机内部查看,不是在host主机上查看;需要重点关注的软件指标包括应用软件、OS层的优化,该部分的调优对于性能的提升是很可观的。

  2. 对于网络问题,需要重点定位的包括网络带宽和网络中断,处理网络中断的核是否压满是需要重点关注的,http长连接场景需要重点关注网络带宽是否达到瓶颈。

  3. 对于客户端问题:客户端的性能是否满足测试需要,尤其对于http短连接场景。

2 硬件调优

2.1 配置BIOS

目的

对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器性能。

方法

步骤 1 关闭SMMU。

                

                

                    此优化项只在非虚拟化场景使用,在虚拟化场景,则开启SMMU。

    1. 重启服务器,按Esc键进入BIOS,选择“Advanced > Misc Config”,按Enter进入。

    2. 将“Support Smmu”设置为“Disable”,保存退出(永久有效)。

步骤 2 关闭预取。

    1. 重启服务器,按Esc键进入BIOS,选择“Advanced>MISC Config”,按Enter进入。

    2. 将“CPU Prefetching Configuration”设置为“Disabled”,保存退出。

3 操作系统调优


3.1 扩展文件描述符

目的

在Nginx环境中,需要配置最大打开文件数为102400,否则在测试过程中可能会导致软件最大打开文件数被限制在1024,影响服务器性能。

方法

方法1:永久设置。

            步骤1 输入:

            cat << _EOF >> /etc/security/limits.conf

            步骤2 输入:

            *    soft    nofile    102400

            步骤3 输入:

            *    hard   nofile    102400

                       

                            重启系统后,该方法生效。

方法2:临时设置。

            输入:

                ulimit -n 102400

                         

                           该设置只在当前会话中生效。


3.2 关闭透明大页

目的

关闭透明大页,避免内存分配延迟。

方法

方法1:

步骤 1 执行vim /etc/grub2-efi.cfg命令。

步骤 2 搜索字段

    vmlinuz-4.14.0-115.el7a.0.1.aarch64

            在该行最后加上语句,空格分隔

    transparent_hugepage=never

步骤 3 保存退出后,重启服务器。

步骤 4 执行如下语句

    cat /proc/cmdline

            查看语句是否生效,若输出结果中含有字段

    transparent_hugepage=never

            则表示已成功关闭透明大页。


方法2:

使用命令行

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

3.3 设置网卡中断绑核

目的

网卡中断绑核,绑定的核专门用于处理网卡中断,设置网卡队列个数与CPU的core数目保持一致。

方法

步骤 1 绑核前须关闭irqbalance。

            若要对网卡进行绑核操纵,需要关闭irqbalance。

            关闭irqbalance服务,重启失效。

            systemctl stop irqbalance.service

            停止irqbalance服务,永久有效。

            systemctl disable irqbalance.service

            查看irqbalance服务状态是否已关闭。

            systemctl status irqbalance.service

步骤 2 网卡中断绑核,绑定的核专门用于处理网卡中断。

        以1P场景的绑核脚本为例,如果要修改绑核脚本,只需修改要绑定的网口名eth1以及要绑定的core。

        绑核脚本内容如下所示:

    #!/bin/bashcnt=48
    eth1=enp3s0
    ethtool -L $eth1 combined $cnt
    irq1=`cat /proc/interrupts| grep -E ${eth1} | head -1 | awk -F ':' '{print $1}'
    irq1=`echo $irq1`
    i=0
    while(( $i < 1))
    do
    for ((cpunum=0; cpunum< 48; cpunum++))
        do
            echo $cpunum "->" $irq1
            echo  $cpunum > /proc/irq/$irq1/smp_affinity_list
            let "irq1++"
        done
        let "i++"
    done
表1 参数及命令说明

参数及命令名称

参数及命令解释

cnt

网口队列数

eth1

通信中使用的网口名

irq1

网口eth1对应的中断号

cpunum

分配给网口eth1用于处理网卡中断的核

ethtool -L $eth1 combined $cnt

设置队列数为核数

cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'

查询网口中断号

echo $cpunum > /proc/irq/$irq/smp_affinity_list

根据中断号,将每个中断各绑定在一个核上

4 场景调优

4.1 物理机调优

目的

设置memcached服务的亲和性:以物理机1P场景为例,使用numactl设置CPU与内存的亲和性。

方法

步骤 1 安装numactl

            yum -y install numactl

步骤 2 编辑/usr/lib/systemd/system/memcached.service

            添加如下内容

    ExecStart=/usr/bin/numactl --cpunodebind=0,1 --membind=0,1 /opt/memcached/bin/memcached -t 48 -p 11211 -u root -m 122880 -c 100000
表1 命令参数说明

参数名称

参数说明

--cpunodebind=nodes

进程绑定CPU,其中0,1表示绑定node0和node1的core

--membind=nodes

分配进程的内存,其中0,1表示分配的内存在node0和node1上

-t <num>

使用的线程数(48表示使用48个线程)

-p <num>

监听的TCP端口

-u <username>

设定进程所属用户。(只有root用户可以使用这个参数)

-m <num>

分配给memcached实例的内存大小,以MB为单位。

-c <num>

最大并发连接数。

4.2 虚拟机调优

目的

修改kvm虚拟机配置文件:配置虚拟机的CPU、内存、网卡。

方法

步骤 1  编辑虚拟机配置文件。

             以虚拟机vm1为例,执行如下语句编辑虚拟机配置文件:

            virsh edit vm1

        

            该命令为打开vm1的配置文件,后续步骤2-5均在此基础上完成,修改完成后执行 :wq 保存即可,配置文件需重启虚拟机生效,执行如下命令重启   虚拟机:

     virsh shutdown vm1
      virsh start vm1

步骤 2 设置vcpu与物理cpu绑定。

            设置vcpu与物理cpu绑定的脚本如下所示:

      <vcpu placement='static' cpuset='0-3'>4</vcpu>
      <cputune>
      <vcpupin vcpu='0' cpuset='0'/>
      <vcpupin vcpu='1' cpuset='1'/>
      <vcpupin vcpu='2' cpuset='2'/>
      <vcpupin vcpu='3' cpuset='3'/>
      <emulatorpin cpuset='0-3'/>
      </cputune>

        unnaming (3).png

表1 参数说明

参数

说明

cpuset

表示物理核

vcpu

表示虚拟核

步骤 3 设置numa绑定。

            设置numa绑定的脚本如下所示:

        <numatune>
        <memnode cellid='0' mode='strict' nodeset='0'/>
        </numatune>
        <cpu mode='host-passthrough' check='none'>
        <topology sockets='1' cores='4' threads='1'/>
        <numa>
        <cell id='0' cpus='0-3' memory='12582912' unit='KiB'/>
        </numa>
        </cpu>

        unnaming (4).png

参数

说明

nodeset

表示物理机numa node

cellid

表示虚拟机numa node

步骤 4 设置PCIe网卡直通。

            设置PCIe网卡直通的脚本如下所示:

      <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
      <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      </hostdev>

            unnaming (5).png

            其中"domain"、"bus"、"slot"和"function"是对应物理网卡的信息,可以执行lspci或者ethtool -i 网卡名 命令查看。

        

        执行lspci,输出如下结果,只需关注最左侧的数字:

        “82:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)”

        其中,网卡的bus-info是16进制数,由上述输出结果最开头的数字82:00.0可以看出,bus为0x82,slot为0x00,function为0x0,domain为0x0000。

步骤 5 设置静态大页。

    1. 宿主机配置静态大页。

      在kernel启动时的cmdline添加配置参数,即在/boot目录下的grub.cfg 文件添加如下设置:

      transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=200

        

        配置1G的hugepage,需要当前宿主机页表大小为4K。

        b4d2973d-a1a6-40f1-a1a6-79020d9763d1.png

        2.设置内存大页配置。

        设置内存大页的脚本如下所示:

    <memoryBacking>
    <hugepages>
    <page size=’ 1048576’ unit=’KiB’ nodeset=’0’/>
    </hugepages>
    </memoryBacking>


Memcached 1.5.12 调优指南(CentOS 7.6).pdf 258.64 KB,下载次数:0 预览

举报
分享

分享文章到朋友圈

分享文章到微博

阿奇@汪汪...

发帖: 24粉丝: 9

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2019-9-11 20:09:21 沙发 显示全部楼层

猫粮哥帖子描述详细很全面

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册