• 服务器可靠性稳定性调优指引


    一、linux服务器调优

    1、设置向外连接的端口范围

    vi /etc/sysctl.conf

    设置如下值:

    net.ipv4.ip_local_port_range= 10000 65535
    
    • 1

    提示:使修改生效:/sbin/sysctl -p

    2、服务器时间

    1、Linux服务器的时间至关重要,生产环境的服务器一般无法与互联网连接,无法自动校准时间,可以用个date -s命令手动校准服务器时间。

    设置服务器时间指令参考:

    date -s “yyyy-MM-dd HH:mi:ss”

    更新 BIOS 的时间的指令:

    hwclock -w

    2、设置时区为东八区

    timedatectl set-timezone Asia/Shanghai

    3、如果是云平台提供的linux,需要向云平台服务商提出保障服务器时间准确性。

    4、多台服务器之间的时间同步可以使用chrony或NTP,教程找百度。

    二、nginx配置调优

    1、配置进程数

    找到nginx的全局配置文件,修改配置内容

    8核的配置参数:

    vi nginx.conf

    worker_processes  8;
     
    worker_cpu_affinity  00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    
    • 1
    • 2
    • 3

    6核的配置参数:

    vi nginx.conf

    worker_processes  6;
     
    worker_cpu_affinity  00000001 00000010 00000100 00001000 00010000 00100000;
    
    • 1
    • 2
    • 3

    4核的配置参数:

    vi nginx.conf

    worker_processes  4;
     
    worker_cpu_affinity  00000001 00000010 00000100 00001000;
    
    • 1
    • 2
    • 3

    2、配置进程能打开的文件数量上限

    vi nginx.conf

    设置如下值:

    #所有进程能打开的文件数量上限

    worker_rlimit_nofile 65535;
    
    • 1

    3、配置连接数

    调优项 worker_connections 推荐值 8000

    每个进程最大处理的连接数。注意:进程数乘每个进程最大连接数要小于最大文件打开数

    vi nginx.conf

    events {
        #每个进程最大处理的连接数
        worker_connections  8000;
    }
    
    • 1
    • 2
    • 3
    • 4

    4、开启内容压缩

    调优项 gzip 推荐值 on

    开启内容压缩,可能为我们节约带宽,加快传输速度,但对服务端cup有损耗。

    vi nginx.conf

    http {
        #内容压缩
        gzip on;
        gzip_comp_level 5;
        gzip_min_length 1k;
        gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
        gzip_static on;
        gzip_http_version 1.0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5、设置长连接超时

    调优项 keepalive_timeout 推荐值 65

    客户端连接保持长会话超时时间,超过这个时间,服务器断开这个链接。

    vi nginx.conf

    http {
        #长链接超时时间
        keepalive_timeout 65;
    }
    
    • 1
    • 2
    • 3
    • 4

    6、设置缓存open_file_cache

    调优项推荐值调优说明
    open_file_cache max65535指定缓存open_file数量,建议和打开文件数一致。
    open_file_cache inactive60指经过多长时间open_file没被请求后删除缓存。
    open_file_cache_valid80这个是指多长时间检查一次缓存的有效信息
    open_file_cache_min_uses1open_file被使用最少1次数后,将被缓存

    vi nginx.conf

    location /aaa/bbb {
        open_file_cache max=65535 inactive=60s;
        open_file_cache_valid 80s;
        open_file_cache_min_uses 1;
        root mypath
        index ccc.json
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:open_file_cache相关的配置项只配置在location域内,不要做全局配置。open_file_cache是缓存文件的元数据,不缓存内容数据。切记不要缓存动态文件,大并发时会报Refer to pread() read only xxxx of yyyy。

    7、使用epoll模型

    events {
        #使用epoll模型
        use epoll;
    }
    
    • 1
    • 2
    • 3
    • 4

    8、有上传文件场景的需要配置body的最大值。

    注意:最大值按业务应用系统实际需要配置。

    http {
        client_max_body_size 10m;
        client_body_buffer_size 1m;
    }
    
    • 1
    • 2
    • 3
    • 4

    三、JVM配置调优

    1、JVM关键核心参数配置

    调优项推荐值调优说明
    -Xms总内存除以节点数,再乘以0.85JVM启动时初始化整个堆(包括年轻代,年老代)的大小,可以与Xmx保持一致
    -Xmx总内存除以节点数,再乘以0.85JVM启动后整个堆(包括年轻代,年老代)的最大值
    XX:+UseG1GC使用G1回收

    以内存32G服务器,部署4个节点,平均每个节点8G,每个节点JVM启动参数参考配置如下,取大概值即可:

    java -jar -XX:+UseG1GC -Xms=6144m -Xmx=6144m

    四、springboot应用程序配置调优

    1、springboot应用程序JVM配置

    可以参考JVM调优章节

    2、springboot应用程序连接数

    调优项推荐值调优说明
    maxConnections8000最大连接数,1个进程大概处理100到150个请求,取决于请求的响应时间。
    connectionTimeout30000访问连接超时时间,如果存在大文件上传,可以考虑设置大一点。
    maxThreads800最大线程数,可以理解为并发数,1核cup大概支持100线程
    acceptCount1000接受排队的请求个数

    修改properties配置文件,以1个节点8核32G关键配置参考如下:

    server:
      tomcat:
        max-threads: 800
        accept-count: 1000
        max-connections: 8000
    
    • 1
    • 2
    • 3
    • 4
    • 5

    五、mysql8数据库调优

    以下是一些关键的配置参数,在my.conf文件中设置

    调优项推荐值调优说明
    character_set_serverutf8mb4编码。
    default-storage-engineInnoDB存储引擎
    lower_case_table_names1表名不区分大小写
    interactive_timeout3600服务器关闭交互式连接前等待活动的秒数
    wait_timeout3600服务器关闭非交互连接之前等待活动秒数
    max_connections2048MySQL的最大连接数
    max_connect_errors20480一般设置max_connections的10倍以上
    back_log600等待某一连接释放资源的数量
    open_files_limit40960打开的文件描述符限制
    table_open_cache2048指定表缓存的数量

    mysql8的my.conf配置

    # ---------------- 基础配置 ----------------
    #自定义端口
    port = 3306
    #服务端sock文件路径,每个数据库独立一个,文件路径按实际情况自行定义。
    socket = /home/datax/mysql/data/mysql8.0.18/3306/mysql.sock
    #mysql的安装目录,文件路径按实际情况自行定义。
    basedir = /home/datax/mysql8.0.18
    #数据存储目录,最好和安装目录分开,且每个节点相对独立,文件路径按实际情况自行定义。
    datadir = /home/datax/mysql/data/mysql8.0.18/3306
    #每个数据库的pid文件存放路径,文件路径按实际情况自行定义。
    pid-file = /home/datax/mysql/data/mysql8.0.18/3306/mysql.pid
    #表示MySQL的管理用户
    user = mysql
    #设置服务端编码,utf8mb4是utf8的超集,支持特殊文字,且一个字符最大可占4个字节存储空间,现在mysql基本是用这个编码集
    character_set_server = utf8mb4
    #默认存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU
    default-storage-engine = InnoDB
    #表名不区分大小写
    lower_case_table_names = 1
    
    # ---------------- 连接数、处理文件数配置,用于优化连接 ----------------
    # 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
    interactive_timeout = 3600
    # 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,默认值:28800秒(8小时)
    wait_timeout = 3600
    #MySQL的最大连接数,如果请求量比较大,建议调高此值增加并行连接数量,开销越多的内存,16G内存推进配置800到1000。
    max_connections = 2048
    #对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。一般设置max_connections的10倍
    max_connect_errors = 20480
    #以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
    back_log = 600
    #打开的文件描述符限制,默认最小1024;当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
    open_files_limit = 40960
    #每打开一个表,会读入一些数据到table_open_cache缓存中,缓存中找不到相应信息时,会去磁盘上读取。默认值64。很大时,系统处理不了,会出现客户端失效,连接不上
    table_open_cache = 1024
    
    # ---------------- 缓存配置提高数据库性能 ----------------
    #接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。
    max_allowed_packet = 64M
    # MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
    read_buffer_size = 16M
    # MySQL的随机读缓冲区大小。进行排序查询时,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
    read_rnd_buffer_size = 8M
    # MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
    sort_buffer_size = 16M
    #MySQL的heap(堆积)表缓冲大小。如果调高该值,大多数联合甚至可以不用临时表即可以完成,可达到提高联接查询速度的效果
    tmp_table_size = 32M
    #联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
    join_buffer_size = 8M
    #这个值(默认8,内存超过3G最大设置64)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取。
    thread_cache_size = 64
    
    # ---------------- 普通日志文件配置 ----------------
    #错误日志路径,文件路径按实际情况自行定义。
    log-error = /home/datax/mysql/logs/mysql8.0.18/3306/error.log
    #开启慢查询日志 开启:1,关闭:0
    slow_query_log = 1
    #开启慢查询日志路径,文件路径按实际情况自行定义。
    slow_query_log_file = /home/datax/mysql/logs/mysql8.0.18/3306/slow.log
    #慢查询时间 超过3秒则为慢查询
    long_query_time = 3
    
    # ---------------- Binlog配置(二进制日志文件) ----------------
    #log-bin的存储路径,一般存储在data目录下,文件路径按实际情况自行定义。
    log-bin = /home/datax/mysql/data/mysql8.0.18/3306/mysql-bin
    #log-bin-index的存储路径,一般存储在data目录下,文件路径按实际情况自行定义。
    log-bin-index = /home/datax/mysql/data/mysql8.0.18/3306/mysql-bin.index
    #binlog数据格式,row或mixed
    binlog_format = row
    #超过30天的binlog删除
    expire_logs_days = 30
    #默认0,由文件系统控制binlog刷新,性能是最好的,断电丢失数据风险大,最安设置1,表示每次事务提交,binlog刷新,设置为0和1的写入性能差距高达5倍甚至更多,设置1不适合高并发,但安全。
    sync_binlog = 1
    #一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
    binlog_cache_size = 2M
    #最大binlog缓存大小
    max_binlog_cache_size = 8M
    #binlog日志每达到设定大小后,会使用新的bin log日志。如mysql-bin.000002达到500M后,创建并使用mysql-bin.000003文件作为日志记录
    max_binlog_size = 512M
    
    # ---------------- InnoDB配置 ----------------
    #这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲,专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳。
    innodb_buffer_pool_size = 12G
    #默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
    innodb_thread_concurrency = 0
    #排序缓冲大小
    innodb_sort_buffer_size = 32M
    #限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
    innodb_open_files = 2048
    #意味着在事务提交前日志已被写入磁盘,设为1当然是最安全的,但性能页是最差的
    innodb_flush_log_at_trx_commit = 1
    #innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
    innodb_read_io_threads = 8
    #innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
    innodb_write_io_threads = 8
    #独线程清除操作是一类定期回收无用数据的操作,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1
    innodb_purge_threads = 1
    #innodb主线程刷新缓存池中的数据,使脏数据比例小于90%
    innodb_max_dirty_pages_pct = 90
    #InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间,唯一缺点:单表增加过大,如超过100G
    innodb_file_per_table = 1
    
    # ---------------- innodb_log配置 ----------------
    #此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
    innodb_log_buffer_size = 8M
    #此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
    innodb_log_file_size = 512M
    #为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
    innodb_log_files_in_group = 3
    #这是InnoDB表的目录共用设置,文件路径按实际情况自行定义。
    innodb_log_group_home_dir = /home/datax/mysql/data/mysql8.0.18/3306
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111

    六、redis数据库调优

    调优项推荐值调优说明
    maxclients100000最大连接数。
    maxmemory28G最大内存,物理内存的85%左右
    maxmemory-policyallkeys-lru内存中key淘汰策略

    修改redis.conf文件,参考以下配置:

    #最大连接数
    maxclients 100000
    #最大内存
    maxmemory 10G
    #key淘汰策略
    maxmemory-policy allkeys-lru
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    RNA核糖核酸修饰Alexa 568/RNA-Alexa@ 594/RNA-Alexa@ 610/RNA-Alexa 633荧光染料
    【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~
    『忘了再学』Shell基础 — 29、AWK内置变量
    前端 vue生命周期
    【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引
    Python学习笔记之进程池pool
    JavaScript中DOM文档事件
    操作系统之虚拟内存总结
    堆的原理以及实现O(lgn)
    QT中QByteArray与char、int、float之间的互相转化
  • 原文地址:https://blog.csdn.net/weixin_44953227/article/details/126037761