• Linux系统层面标配


    1.MySQL中出现存SWAP,主要会是哪些原因?
    --物理内存切实不足
    --numa导致内存分配不均,出现物理内存未使用完,就出现大量swap的使用

    2.MySQ中CPU负载很高,是什么原因?给出查找的步骤及解决思路?

    推荐Linux操作系统
    主机及操作系统 $ uname -a
    Linux MyDB1 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    内核版本 $ cat /proc/version
    Linux version 2.6.32-504.23.4.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version
    4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Tue Jun 9 20:57:37 UTC 2015
    发行版本 $ cat /etc/issue
    CentOS release 6.6 (Final)
    Kernel on an m
    设定主机名
    vim /etc/sysconfig/network
    HOSTNAME=XXX(按照命名规范)/idc_name_035076_mysql_idc.baidu.com
    设定时区
    vim /etc/sysconfig/clock
    ZONE=Asia/Shanghai
    UTC=false
    ARC=false
    rm /etc/localtime
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    设定NTP同步
    ntpdate 182.92.12.11
    sudo crontab -l
    0 * * * * /usr/sbin/ntpdate 192.168.50.21; hwclock -w 1>/dev/null 2>&1
    30 23 * * * /usr/sbin/ntpdate 192.168.50.22; hwclock -w 1>/dev/null 2>&1
    关闭 SELinux
    # sestatus
    # setenforce 0
    # getenforce
    删除操作系统多余组
    删除操作系统多余账户
    清理不需要的服务
    设置口令有效期
    vim /etc/login.defs文件,修改如下行
    将PASS_MAX_DAYS值设置为90(天)
    PASS_MAX_DAYS 99999
    设置密码复杂度
    vim /etc/pam.d/login
    增加如下内容
    password required pam_cracklib.so difok=5 dcredit=-1 retry=1
    新密码与旧密码必须有5个不同字符
    必须有一个数字
    一次失败后passwd程序返回错误信息
    设置缺省密码长度限制
    vim /etc/login.defs文件,修改如下行
    ? vim /etc/login.defs
    ? 把下面这行
    ? PASS_MIN_LEN 5 改为
    ? PASS_MIN_LEN 8
    SSH安全配置
    vim /etc/ssh/sshd_config
    Procotol 2(强制使用协议)
    PermitRootLogin no(不允许root远程登录)
    给用户sudo权限
    [root@mysql1 ~]# chmod u+w /etc/sudoers #添加文件的写权限
    [root@mysql1 ~]# vim /etc/sudoers
    "root ALL=(ALL) ALL"在起下面添加"mysql ALL=(ALL) ALL
    [root@mysql1 ~]# chmod u-w /etc/sudoers #撤销文件的写权限

    设置历史命令记录增加时间戳
    vim /etc/profile
    在文件中增加如下内容:
    HISTTIMEFORMAT="%Y:%M:%D %H-%m-%s"
    export=HISTTIMEFORMAT
    chmod 600 用户当前目录下.bash_history(修改文件权限)

    防止rm误删文件
    alias
    [root@mysql1 ~]# alias
    alias cp='cp -i'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    设置系统启动时运行等级
    编辑/etc/inittab文件:
    id:5:initdefault:改为:id:3:initdefault:
    ? 注:5为带X-Windows桌面系统的运行级别,3为多用户运行级别。
    内核参数优化
    # vim /etc/sysctl.conf
    fs.file-max=655350
    kernel.shmmax
    kernel.shmall
    vm.swappiness =10
    ulimit参数优化
    # vim /etc/security/limits.conf
    mysql soft nproc 65535
    mysql hard nproc 65535
    mysql soft nofile 65535
    mysql hard nofile 65535
    ##mysql hard memlock unlimited
    ##mysql soft memlock unlimited

    调整操作系统预读
    df -Th
    [root@mysql1 ~]# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    /dev/mapper/vg_mysql1-lv_root
    ext4 50G 15G 33G 31% /
    tmpfs tmpfs 1004M 76K 1004M 1% /dev/shm
    /dev/sda1 ext4 485M 55M 405M 12% /boot
    /dev/mapper/vg_mysql1-lv_home
    ext4 45G 1.2G 42G 3% /home
    [root@mysql1 ~]# cat /sys/block/sda/queue/read_ahead_kb
    128-->>16
    这个参数默认是128,没有准确的答案,针对不同的应用场景有不同的合理值,这个不大适合统一标准化,知道就好
    调整CPU亲和性
    #该参数Centos 6.x有,默认是0(6.3) 1(6.4+),调整CPU亲和性, 确保每个io都被其发起的
    CPU处理
    [root@hongquan1 mapper]# more /sys/block/sda/queue/rq_affinity
    1
    ? 设置为1,表示io请求来自于哪一个cpu node,完成就返回这个node,设置为2,具体到是那个
    cpu发起,就原路返回,比较好的分散到各个cpu,且减少cpu之间的循环
    #rotational、 read_ahead_kb、 rq_affinity参数的调整对SSD硬盘性能几乎没有影响,建议使用默认配置,
    没遇到跟该参数有关的问题
    --cpu节能模式--关闭
    #vi /etc/powersave/cpufreq
    CPUFREQ_ENABLED=”no”
    重启/etc/init.d/powersave即可

    提高调度器请求队列
    Fusion-io默认是1024,Shannon-io默认是128
    [root@mysql1 ~]# more /sys/block/sda/queue/nr_requests
    128
    #当有较大的io压力时,能减小系统load和提高IO吞吐量
    [root]# vim /sys/block/dfa/queue/nr_requests
    4096
    我们的生产环境
    这个就保持默认就好,没遇到跟该参数有关的问题,SSD下改了不会有很大区别

    关闭透明大内存页动态管理
    #永久关闭,就将下面的命令写入到/etc/rc.local文件中
    echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
    echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
    [root@mysql1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never
    NUMA使用规则
    关闭NUMA,对SSD硬盘性能提高较大
    统一关闭NUMA
    mysql启动脚本修改为 sudo /usr/bin/numactl --interleave=all
    $MYSQL_BASE/bin/mysqld_safe --defaults-file=$MYSQL_CONF/mysql.cnf

    Linux网络优化
    #ringbuffer设置为最大的4096
    ? /sbin/ethtool -G eth0 tx 4096
    ? /sbin/ethtool -G eth1 rx 4096
    ? #这个功能原本是为了在多队列网卡下做流量hash的。我们过去的网卡驱动因为版本问题没这个功
    能,但这台机器的网
    ? 卡驱动还是芯片问题默认开启了这个功能,但没有设过相应的buffer所以容易出现丢包。 (ethtool
    -S eth0 | grep fdir
    ? 可以看到很多overflow是这个造成的),这个功能对后端没用,应当关闭
    ? /sbin/ethtool -K eth0 ntuple off
    ? /sbin/ethtool -K eth1 ntuple off

    磁盘调度算法设置
    #Flash卡
    Fusion厂商使用 noop;Shannon厂商屏蔽了用户不可设置,使用noop
    IO调度算法设置为noop ,因为IO调度算法采用Deadline和Noop性能差距不大,Noop调度算法
    性能略高于Deadline;
    ?#SAS盘
    echo "deadline" >/sys/block/sdb/queue/scheduler
    #SSD推荐noop,其它推荐deadline

    禁用设备轮转
    2.6.29内核以后,linux就自动判断是SSD还是HDD,通过如下参数可以得知,除非有人为更改,0
    是SSD,1是HDD
    [root@mysql1 ~]# cat /sys/block/sda/queue/rotational
    1
    文件系统优化
    ##xfs在大多数场景下整体IOPS表现还是要比ext4来得更高、更稳定,延迟也更小。
    采用XFS文件系统, mount with noatime
    #格式化标准命令
    mkfs.xfs -f -i attr=2 -l lazy-count=1,sectsize=4096 -b size=4096 -d sectsize=4096 -L data /dev/sda1
    #mount标准命令
    mount -o rw,noatime,nodiratime,noikeep,nobarrier,allocsize=100M,attr2,largeio,inode64,swalloc
    /dev/sda1 /apps

    ----
    1、使用 deadline/noop这两种I/O调度器,千万别用 cfq (它不适合跑DB类服务);
    2、使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs;
    3、文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的);
    1、将vm.swappiness设置为5-10左右即可,甚至设置为0(RHEL 7以上则慎重设置为0,除非你允许OOM kill发生),以降低使用SWAP的机会;
    2、将vm.dirty_background_ratio设置为5-10,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待(和MySQL中的innodb_max_dirty_pages_pct类似);
    3、将net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率;
    4、至于网传的read_ahead_kb、nr_requests这两个参数,我经过测试后,发现对读写混合为主的OLTP环境影响并不大(应该是对读敏感的场景更有效果),不过没准是我测试方法有问题,可自行斟酌是否调整;

  • 相关阅读:
    mybatis-databaseIdProvider多数据库支持
    mysql-高性能索引策略
    mysql-冗余和重复索引
    mybatis-枚举类型的typeHandler&自定义枚举类型typeHandler
    mybatis-自定义typeHandler
    mysql-覆盖索引
    单例模式
    mybatis实战教程一:开发环境搭建
    MySQL分页查询优化
    深入组件
  • 原文地址:https://www.cnblogs.com/yhq1314/p/10251252.html
Copyright © 2020-2023  润新知