• 系统优化怎么做-Linux系统配置优化


    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新

    在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化的各个方面,干货满满,欢迎订阅及关注!

    前言

    应用系统跑在操作系统上面,系统的性能也关系到应用程序的性能,这里讲一些Linux性能关键的配置信息。

    永久关闭selinux

    selinux提高系统安全性,但会造成很多麻烦,一般关闭

    [root@localhost ~]# vim /etc/selinux/config

    将SELINUX=enforcing改为SELINUX=disabled,保存后退出,重启生效

    [root@localhost ~]# reboot
    
    

    设定系统runlevel为3

    节约系统资源

    [root@localhost ~]# grep 3:initdefault /etc/inittab
    id:3:initdefault:
    [root@localhost  ~]# init 3

    加大系统文件描述符最大值

    vim /etc/security/limits.conf

    调整大小

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 65536
    * hard nproc 65536

    说明:* 代表针对所有用户

    noproc 是代表最大进程数

    nofile 是代表最大文件打开数

    调整内核参数文件 /etc/syctl.conf

    配置网络参数来提高系统负载能力
    如果出现服务器丢包的情况,需要考虑是不是如下配置需要调整

    vim /etc/syctl.conf
    1. net.ipv4.tcp_syncookies = 1
      表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    2. net.ipv4.tcp_tw_reuse = 1
      表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
    3. net.ipv4.tcp_tw_recycle = 1
      表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    4. net.ipv4.tcp_fin_timeout = 30
      表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
    5. net.ipv4.tcp_keepalive_time = 1200 
      表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
    6. net.ipv4.ip_local_port_range = 1024 65000 
      表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
    7. net.ipv4.tcp_max_syn_backlog = 8192 
      表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
    8. net.nf_conntrack_max = 655360 
      在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)

    防火墙配置

    /etc/syctl 尾部加上如下防火墙相关配置

    有可能是sysctl.conf.first文件

    开启重用,回收 socket资源用于新的TCP链接

    net.ipv4.tcp_tw_reuse=1

    开启回收:

    net.ipv4.tcp_tw_recycle=1

    网络链接最大值及超时配置

    net.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_tcp_timeout_established = 180
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

    net.nf_conntrack_max

           nf_conntrack_max决定连接跟踪表的大小,默认值是65535,可以根据系统内存大小计算一个合理值:CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G内存可以设置1048576;

    nf_conntrack_buckets

           决定存储conntrack条目的哈希表大小,默认值是nf_conntrack_max的1/4,延续这种计算方式:BUCKETS = CONNTRACK_MAX/4,如32G内存可以设置262144;

    net.netfilter.nf_conntrack_max

          最大连接数

    net.netfilter.nf_conntrack_tcp_timeout_established

        决定ESTABLISHED状态连接的超时时间,默认值是5天,可以缩短到1小时,即3600

    net.netfilter.nf_conntrack_tcp_timeout_time_wait

        决定WAIT状态连接的超时等待时间

    net.netfilter.nf_conntrack_tcp_timeout_close_wait

        决定关闭状态连接的超时等待时间

    net.netfilter.nf_conntrack_tcp_timeout_fin_wait

        决定WAIT状态连接的超时等待时间

    以上配置生效

    sysctl –p

    常见异常

    • too many open files(打开的文件过多)

    程序在Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

    在高并发情况或者程序代码中没有正确关闭IO, 并系统限制比较小的情况下,系统在运行一段时间后,程序打开句柄数超过系统限制的时候抛出该异常。

    • 连接服务器超时

    一般TimeWait进程数过多
    原因一般为 应用程序没有正确关闭连接,导致服务器TIME_WAIT进程过多,主动关闭连接导致TIME_WAIT产生。先检查程序及系统以上配置

    常见命令

    查看机器网络状态状态

    netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"	",state[key]}'LAST_ACK 

    状态:描述
    CLOSED:无连接是活动的或正在进行
    LISTEN:服务器在等待进入呼叫
    SYN_RECV:一个连接请求已经到达,等待确认
    SYN_SENT:应用已经开始,打开一个连接
    ESTABLISHED:正常数据传输状态
    FIN_WAIT1:应用说它已经完成
    FIN_WAIT2:另一边已同意释放
    ITMED_WAIT:等待所有分组死掉
    CLOSING:两边同时尝试关闭
    TIME_WAIT:另一边已初始化一个释放
    LAST_ACK:等待所有分组死掉

    总结

    Linux提供了丰富的内核参数供使用者调整,调整得当可以大幅提高服务器的处理能力

    思考题

    1. 线上应用系统出现问题,怎么快速定位系统哪块资源问题

  • 相关阅读:
    一个苏州IT人的5年挨踢经历经历篇(之二)
    【Java】Collection 集合框架概述
    【Java】Collection子接口:其二 Set 组接口
    【Java】【常用类】Calendar 日历类
    【郝斌C ST】01
    【Java】【常用类】Date 日期类
    【Java】Enumeration Class 枚举类
    【Java】Properties 配置信息类
    【Java】Generic 泛型
    【Java】Annotation 注解
  • 原文地址:https://www.cnblogs.com/changsong/p/9350734.html
Copyright © 2020-2023  润新知