当前位置:网站首页>服务器可靠性稳定性调优指引
服务器可靠性稳定性调优指引
2022-07-30 06:12:00 【weixin_44953227】
目录
一、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 max | 65535 | 指定缓存open_file数量,建议和打开文件数一致。 |
open_file_cache inactive | 60 | 指经过多长时间open_file没被请求后删除缓存。 |
open_file_cache_valid | 80 | 这个是指多长时间检查一次缓存的有效信息 |
open_file_cache_min_uses | 1 | open_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.85 | JVM启动时初始化整个堆(包括年轻代,年老代)的大小,可以与Xmx保持一致 |
-Xmx | 总内存除以节点数,再乘以0.85 | JVM启动后整个堆(包括年轻代,年老代)的最大值 |
XX:+UseG1GC | 使用G1回收 |
以内存32G服务器,部署4个节点,平均每个节点8G,每个节点JVM启动参数参考配置如下,取大概值即可:
java -jar -XX:+UseG1GC -Xms=6144m -Xmx=6144m
四、springboot应用程序配置调优
1、springboot应用程序JVM配置
可以参考JVM调优章节
2、springboot应用程序连接数
调优项 | 推荐值 | 调优说明 |
---|---|---|
maxConnections | 8000 | 最大连接数,1个进程大概处理100到150个请求,取决于请求的响应时间。 |
connectionTimeout | 30000 | 访问连接超时时间,如果存在大文件上传,可以考虑设置大一点。 |
maxThreads | 800 | 最大线程数,可以理解为并发数,1核cup大概支持100线程 |
acceptCount | 1000 | 接受排队的请求个数 |
修改properties配置文件,以1个节点8核32G关键配置参考如下:
server:
tomcat:
max-threads: 800
accept-count: 1000
max-connections: 8000
五、mysql8数据库调优
以下是一些关键的配置参数,在my.conf文件中设置
调优项 | 推荐值 | 调优说明 |
---|---|---|
character_set_server | utf8mb4 | 编码。 |
default-storage-engine | InnoDB | 存储引擎 |
lower_case_table_names | 1 | 表名不区分大小写 |
interactive_timeout | 3600 | 服务器关闭交互式连接前等待活动的秒数 |
wait_timeout | 3600 | 服务器关闭非交互连接之前等待活动秒数 |
max_connections | 2048 | MySQL的最大连接数 |
max_connect_errors | 20480 | 一般设置max_connections的10倍以上 |
back_log | 600 | 等待某一连接释放资源的数量 |
open_files_limit | 40960 | 打开的文件描述符限制 |
table_open_cache | 2048 | 指定表缓存的数量 |
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数据库调优
调优项 | 推荐值 | 调优说明 |
---|---|---|
maxclients | 100000 | 最大连接数。 |
maxmemory | 28G | 最大内存,物理内存的85%左右 |
maxmemory-policy | allkeys-lru | 内存中key淘汰策略 |
修改redis.conf文件,参考以下配置:
#最大连接数
maxclients 100000
#最大内存
maxmemory 10G
#key淘汰策略
maxmemory-policy allkeys-lru
边栏推荐
- Go uses the mencached cache
- Boot process and service control
- Link with Bracket Sequence II(杭电多校赛)
- go : use gorm to modify data
- sizeof
- No, the Log4j vulnerability hasn't been fully fixed yet?
- 2020年度总结——品曾经,明得失,展未来
- Limit injection record of mysql injection in No. 5 dark area shooting range
- 适合程序员的输入法
- 云服务器零基础部署网站(保姆级教程)
猜你喜欢
BGP:边界网关路由协议 无类别的路径矢量EGP协议
MySQL master-slave replication configuration construction, one step in place
bean的生命周期
02 多线程与高并发 - synchronized 解析
The calculation and source code of the straight line intersecting the space plane
golang : Zap log integration
docker部署redis一主二从三哨兵模式
如何实时计算日累计逐单资金流
获取controller中所有接口路径和名称
mysql高阶语句(一)
随机推荐
Ali two sides: Sentinel vs Hystrix comparison, how to choose?
DP5340 domestic replacement for CM5340 stereo audio A/D converter chip
BGP:边界网关路由协议 无类别的路径矢量EGP协议
assert
2022牛客暑期多校训练营3(ACFGJ)
DP5340国产替代CM5340立体声音频A/D转换器芯片
申请内存,std::transform和AVX256指令集用例和执行速度比较
ArrayList
云服务器零基础部署网站(保姆级教程)
go : go-redis 基础操作
Goto statements
2020 数学建模之旅
The calculation and source code of the straight line intersecting the space plane
Keil compile size and storage instructions
selenium module
Two Permutations(2022杭电杯)
MySQL off-topic [ORM thought analysis]
Vue项目通过node连接MySQL数据库并实现增删改查操作
C# 获取系统已安装的.NET版本
From catching up to surpassing, domestic software shows its talents