网络开发注意事项

简介: 自己实现server时,一定要对内核TCP有关的参数做一些调整,才能使系统的吞吐量处于最佳值。需要注意的是建立连接的吞吐量,网络IO吞吐量,以及连接关闭的处理。 建立连接 我们在做性能测试的时候也许会发现,机器的硬件配置很好,但不管我们怎么调整并发数,机器的load就是一点也上不去。

自己实现server时,一定要对内核TCP有关的参数做一些调整,才能使系统的吞吐量处于最佳值。需要注意的是建立连接的吞吐量,网络IO吞吐量,以及连接关闭的处理。

建立连接

我们在做性能测试的时候也许会发现,机器的硬件配置很好,但不管我们怎么调整并发数,机器的load就是一点也上不去。这种情况一般都是由于操作系统建立连接成为瓶颈。在建立连接的三次握手过程中,Linux内核使用到两个队列:

  • 未完成队列,处于SYN_RECV状态的socket队列
  • 已完成队列,处于ESTABLISHED但没有被应用accept的socket队列

我们要调整两个参数:/etc/sysctl.conf

  • net.ipv4.tcp_max_syn_backlog 未完成队列的最大长度,建议设为20480。
  • net.core.somaxconn 已完成队列的最大长度,建议设为20480。

系统关于上面两个配置的默认值很小,只有200多。如果自己开发server,一定要修改这两个配置。可以通过 /sbin/sysctl -a | grep xxx来查看。修改完后sysctl -p 重新载入内核参数。

listen方法的backlog参数

应用在listen()传入的backlog也用来指定已完成队列长度,系统取值为 min(listen_backlog, net.core.somaxconn)。因此建议在调用listen时传入很大的backlog值。

      The behaviour of the backlog parameter on TCP sockets changed with Linux 2.2.  Now it
      specifies the queue length for completely established sockets waiting to be accepted,
      instead  of  the  number of incomplete connection requests. The maximum length of the
      queue for incomplete sockets can be set using the tcp_max_syn_backlog  sysctl.   When
      syncookies  are enabled there is no logical maximum length and this sysctl setting is
      ignored.  See tcp(7) for more information.

accept()线程

如果应用调用accept()不及时,随着新连接的建立,已完成队列和未完成队列会先后达到容量上限,无法创建新的连接。

TCP读写

sendQ太小,网络的输出吞吐量就上不去,tps也会上不去。而滑动窗口的大小受到对端recvQ的大小限制,因此recvQ也不能太小。

/etc/sysctl.conf 中有几个参数可以修改socket的sendQ和recvQ的大小。

  • net.ipv4.tcp_rmem = 4096 4096 16777216 // 设置读写缓冲区 min default max
  • net.ipv4.tcp_wmem = 4096 4096 16777216
  • net.ipv4.tcp_mem = 196608 262144 393216 //单位:页

关闭连接

修改/etc/sysctl.conf中的以下参数,

  • net.ipv4.tcp_fin_timeout 主动关闭连接一方在FIN_WAIT2状态的超时时间,不会因为没有收到对端的FIN包而一直处于FIN_WAIT2。
  • net.ipv4.tcp_tw_reuse 直接重用TIME_WAIT状态的socket
  • net.ipv4.tcp_tw_recycle 回收利用TIME_WAIT状态的socket,不知道跟tcp_tw_reuse有什么区别。
  • 改为 sessionConfig.setSoLinger(-1)

工具

netstat -s

netstat -s列举出各种网络事件的次数。从中也可以找到一些线索。

相关文章
|
11天前
|
安全 虚拟化
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
30 5
|
缓存 安全 API
网络平台挑选实名制认证API接口的注意事项
网络平台实名制认证是对用户真实性身份进行的一种查验审核,有助于建立完善可靠的互联网信用基础。对于网络平台运营者来说,身份实名认证除了符合工信部监管政策外,也可以帮助平台方筛选掉部分无效客户,规避一定的风险,净化网络环境。
349 0
网络平台挑选实名制认证API接口的注意事项
|
弹性计算 网络安全 数据中心
阿里云VPC创建专有网络10、172和196网段选择注意事项
阿里云VPC创建专有网络10、172和196网段选择注意事项,阿里云专有网络VPC私网网段可选192.168.0.0/16、172.16.0.0/12或10.0.0.0/8,如何选择?阿里云百科来详细说下阿里云专有网络IPv4网段选择方法:
314 0
阿里云VPC创建专有网络10、172和196网段选择注意事项
|
测试技术 数据安全/隐私保护
|
3天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
3天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。
下一篇
无影云桌面