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

一、linux服务器调优

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

vi /etc/sysctl.conf

设置如下值:

net.ipv4.ip_local_port_range= 10000 65535

提示:使修改生效:/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;

6核的配置参数:

vi nginx.conf

worker_processes  6;
 
worker_cpu_affinity  00000001 00000010 00000100 00001000 00010000 00100000;

4核的配置参数:

vi nginx.conf

worker_processes  4;
 
worker_cpu_affinity  00000001 00000010 00000100 00001000;

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

vi nginx.conf

设置如下值:

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

worker_rlimit_nofile 65535;

3、配置连接数

调优项 worker_connections 推荐值 8000

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

vi nginx.conf

events {
    #每个进程最大处理的连接数
    worker_connections  8000;
}

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;
}

5、设置长连接超时

调优项 keepalive_timeout 推荐值 65

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

vi nginx.conf

http {
    #长链接超时时间
    keepalive_timeout 65;
}

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
}

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

7、使用epoll模型

events {
    #使用epoll模型
    use epoll;
}

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

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

http {
    client_max_body_size 10m;
    client_body_buffer_size 1m;
}

三、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

五、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

六、redis数据库调优

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

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

#最大连接数
maxclients 100000
#最大内存
maxmemory 10G
#key淘汰策略
maxmemory-policy allkeys-lru
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值