zoukankan      html  css  js  c++  java
  • RocketMQ os.sh 系统优化(CentOS)

    贴出源码中的优化脚本先:

    #!/bin/sh
    #
    # Execute Only Once
    #
    echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf
    echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf
    echo 'vm.drop_caches=1' >> /etc/sysctl.conf
    echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf
    echo 'vm.max_map_count=655360' >> /etc/sysctl.conf
    echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf
    echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf
    echo 'vm.page-cluster=3' >> /etc/sysctl.conf
    echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf
    echo 'vm.swappiness=10' >> /etc/sysctl.conf
    sysctl -p
    echo 'ulimit -n 655350' >> /etc/profile
    echo 'admin hard nofile 655350' >> /etc/security/limits.conf
    DISK=`df -k | sort -n -r -k 2 | awk -F/ 'NR==1 {gsub(/[0-9].*/,"",$3); print $3}'`
    [ "$DISK" = 'cciss' ] && DISK='cciss!c0d0'
    echo 'deadline' > /sys/block/$DISK/queue/scheduler
    echo "---------------------------------------------------------------"
    sysctl vm.overcommit_memory
    sysctl vm.min_free_kbytes
    sysctl vm.drop_caches
    sysctl vm.zone_reclaim_mode
    sysctl vm.max_map_count
    sysctl vm.dirty_background_ratio
    sysctl vm.dirty_ratio
    sysctl vm.page-cluster
    sysctl vm.dirty_writeback_centisecs
    sysctl vm.swappiness
    su - admin -c 'ulimit -n'
    cat /sys/block/$DISK/queue/scheduler

    这个脚本分别修改了网络参数 、admin的硬资源限制 、硬盘的刷盘模式

    看了下 不能直接运行 

    需要做以下更改

    这个脚本中使用了admin 这个用户,估计阿里的mq是用admin启动的

    如果你用root启动RocketMQ 其中的 

    echo 'ulimit -n 655350' >> /etc/profile
    echo 'admin hard nofile 655350' >> /etc/security/limits.conf

     这两行可以注释掉, 不过生产环境中还是不推荐直接用root启动服务,所以我useradd admin了。

    另个是硬盘优化部分

    首先需要知道RockerMQ 运行产生的文件log 都会放在运行用户的家目录中

    所以可以在home目录中建个admin 然后将盘挂到/home/admin就可以

    接下来是硬盘刷盘模式( I/O Scheduling)

    DISK=`df -k | sort -n -r -k 2 | awk -F/ 'NR==1 {gsub(/[0-9].*/,"",$3); print $3}'`
    [ "$DISK" = 'cciss' ] && DISK='cciss!c0d0'
    echo 'deadline' > /sys/block/$DISK/queue/scheduler

    这个也不适用于笔者的环境。目的是要把硬盘的刷盘模式改为deadline

    查看下当前硬盘刷盘模式(笔者硬盘为sda)

    #cat /sys/block/sda/queue/scheduler
    noop anticipatory deadline [cfq]

    好吧手动改下

    #echo 'deadline' > /sys/block/sda/queue/scheduler
    #cat /sys/block/sda/queue/scheduler 
    noop anticipatory [deadline] cfq

    这种方式是立即生效 但是重启后会丢失

    如果需要重启后也是deadline 需要添加grub参数

    编辑/etc/grub.conf

    找到kernel那行 在最后添加

    elevator=deadline

    至此完成了此脚本中所做的优化

    最后贴出一份笔者改后的(仅仅把参数变量化 方便复用)

    注意: (需要root 或 sudo权限才可执行) 请将脚本中用户和盘符换成你的

    #!/bin/sh
    #
    # Execute Only Once 只可执行一次
    #
    #用户名
    USER=admin
    #磁盘盘符
    DISK=sda
    ##在grub.conf中添加参数 默认注释掉 需要使用请取消注释
    #sed -i 's/kernel.*$/& elevator=deadline/' /etc/grub.conf
    
    echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf
    echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf
    echo 'vm.drop_caches=1' >> /etc/sysctl.conf
    echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf
    echo 'vm.max_map_count=655360' >> /etc/sysctl.conf
    echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf
    echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf
    echo 'vm.page-cluster=3' >> /etc/sysctl.conf
    echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf
    echo 'vm.swappiness=10' >> /etc/sysctl.conf
    sysctl -p
    echo "ulimit -n 655350" >> /etc/profile
    echo "$USER hard nofile 655350" >> /etc/security/limits.conf
    echo 'deadline' > /sys/block/$DISK/queue/scheduler
    echo "---------------------------------------------------------------"
    sysctl vm.overcommit_memory
    sysctl vm.min_free_kbytes
    sysctl vm.drop_caches
    sysctl vm.zone_reclaim_mode
    sysctl vm.max_map_count
    sysctl vm.dirty_background_ratio
    sysctl vm.dirty_ratio
    sysctl vm.page-cluster
    sysctl vm.dirty_writeback_centisecs
    sysctl vm.swappiness
    su - $USER -c 'ulimit -n'
    cat /sys/block/$DISK/queue/scheduler

    至此 优化结束。

    I/O Scheduling 配置参照 http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.io.html#cha.tuning.io.schedulers

    阿里os.sh源脚本:

    https://github.com/alibaba/RocketMQ/blob/develop/bin/os.sh

    转自:https://my.oschina.net/firxiao/blog/315647

  • 相关阅读:
    Java通过 Scanner 类来获取用户的输入
    Java中的Calendar 类和SimpleDateFormat 类
    JAVA中字符串常见操作
    JAVA中数组Arrays类的常见用法
    Java中的compareTo()方法,compareToIgnoreCase()方法
    python常见字符串操作
    linux常见配置文件路径
    python的匿名函数
    python列表解析式,字典解析式,集合解析式和生成器
    Django admin
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/6957741.html
Copyright © 2011-2022 走看看