# 《Seckill秒杀系统》第122章:服务器物理机极致优化

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:了解秒杀场景下服务器物理机可以从哪些方面进行优化,重点掌握秒杀系统场景下服务器物理机极致优化的方式,并能够结合自身实际项目思考,将对服务器的极致优化灵活应用到自身实际项目中。

大家好,我是冰河~~

在专栏前面的文章中,我们已经对秒杀系统的源码进行了相应的优化,并且通过对秒杀系统的全链路压测,我们对秒杀系统的整体性能瓶颈有了初步的了解。除了代码层面外,我们还需要对秒杀系统整体环境进行优化。

# 一、前言

如果要将秒杀系统的性能优化到极致,单单优化秒杀系统源码的性能是远远不够的,还需要进一步优化服务器和操作系统的性能。将秒杀系统所在的服务器和操作系统性能再提升一个档次,会让秒杀系统的性能更高。

# 二、本章诉求

对秒杀系统所在的服务器进行优化,了解秒杀场景下服务器物理机可以从哪些方面进行优化,重点掌握秒杀系统场景下服务器物理机极致优化的方式,并能够结合自身实际项目思考,将对服务器的极致优化灵活应用到自身实际项目中。

注意:本章对服务器的优化都是基于CentOS服务器,如果是其他版本服务器的话,优化的参数或者优化的方式可能会有所不同。

# 三、操作系统参数

在CentOS 操作系统中,可以通过如下命令来查看所有的系统参数。

/sbin/sysctl -a
1

使用此命令输出的参数太多了,大概有一千多个,在高并发场景下,不可能对操作系统的所有参数进行调优。更多的是关注与网络相关的参数。如果想获得与网络相关的参数,那么,首先需要获取操作系统参数的类型,如下命令可以获取操作系统参数的类型。

/sbin/sysctl -a|awk -F "." '{print $1}'|sort -k1|uniq
1

运行上述命令,输出的结果信息如下所示。

abi
crypto
debug
dev
fs
kernel
net
sunrpc
user
vm
1
2
3
4
5
6
7
8
9
10

其中的net类型就是要关注的与网络相关的操作系统参数。可以获取net类型下的子类型,如下所示。

/sbin/sysctl -a|grep "^net."|awk -F "[.| ]" '{print $2}'|sort -k1|uniq
1

运行上述命令,输出的结果信息如下所示。

bridge
core
ipv4
ipv6
netfilter
nf_conntrack_max
unix
1
2
3
4
5
6
7

在Linux操作系统中,这些与网络相关的参数都可以在/etc/sysctl.conf 文件里修改,如果/etc/sysctl.conf 文件中不存在这些参数,可以自行在/etc/sysctl.conf 文件中添加这些参数。

注意:在net类型的子类型中,需要重点关注的子类型有:core和ipv4。

# 四、优化套接字缓冲区

如果服务器的网络套接字缓冲区太小,就会导致应用程序读写多次才能将数据处理完,这会大大影响程序的性能。如果网络套接字缓冲区设置的足够大,在一定程度上能够提升程序的性能。

可以在服务器的命令行输入如下命令,来获取有关服务器套接字缓冲区的信息。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码