linux 网络性能优化
最近在对程序进行调优,涉及到了网络通信,学习了一下对网络调优的方法,网上的资料很多,针对软件优化方面,大体上主要有两种方式:一是网卡参数,另一个是内核参数。
一. 网卡参数优化
针对网卡参数优化,需要了解ethtool命令的用法:
# Queries the specified network device for rx/tx ring parameter information.
ethtool -g|--show-ring devname
# Changes the rx/tx ring parameters of the specified network device.
ethtool -G|--set-ring devname [rx N] [rx-mini N] [rx-jumbo N] [tx N]
# Initiates adapter-specific action intended to enable an operator to easily identify the adapter by sight.Typically this involves blinking one or more LEDs on the specific network port.
ethtool -p|--identify devname [N]
# Queries the specified network device for NIC- and driver-specific statistics.
ethtool -S|--statistics devname
# Queries the specified network device for associated driver information.
ethtool -i|--driver devname
# Prints current settings of the specified device.
ethtool devname
比如查看当前网卡的buffer大小:

若eth0的rx有丢包问题,则修改buffer大小:
ethtool -G eth0 rx 2048
二. 内核参数优化
#Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536 # Controls the maximum size of a message, in bytes
kernel.msgmax = 65536 # Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736 # Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296 # 表示socket监听的backlog(监听队列)上限
net.core.somaxconn = 32768
# 内核用于所有类型的连接的默认发送缓冲大小
net.core.wmem_default = 8388608
# 内核用于所有类型的连接的默认接收缓冲大小
net.core.rmem_default = 8388608
# 内核用于所有类型的连接的最大接收缓冲大小
net.core.rmem_max = 16777216
# 内核用于所有类型的连接的最大发送缓冲大小
net.core.wmem_max = 16777216
# tcp报文时间戳
net.ipv4.tcp_timestamps = 0
# 内核放弃连接之前发送SYN+ACK 包的数量
net.ipv4.tcp_synack_retries = 1
# 内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 0
# 是否开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
# 是否允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1 # 第一个值是为 socket 的发送缓冲区分配的最少字节数。
# 第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。
# 第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。
net.ipv4.tcp_mem = 94500000 915000000 927000000 # 系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上;如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息;这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,如果需要修改,在确保有足够内存可用的前提下,应该增大此值。这个数值越大越好,越大对于抗攻击能力越强
net.ipv4.tcp_max_orphans = 3276800 # 用于向外连接的端口范围。缺省情况下很小:32768到61000
net.ipv4.ip_local_port_range = 1024 65535
# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout = 10
# 当keepalive起用的时候,TCP发送keepalive消息的频度,默认是是2小时
net.ipv4.tcp_keepalive_time = 100
# 是否开启SYN Cookies,即当SYN等待队列溢出时,是否启用cookies功能
net.ipv4.tcp_syncookies = 1
# 保存的那些尚未收到客户端确认信息的连接请求的最大值;默认为128
net.ipv4.tcp_max_syn_backlog = 8192 # 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默 认为180000,改为6000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。
net.ipv4.tcp_max_tw_buckets = 20000
常用命令:
1. 查看当前打开的套接字数量:
sar -n SOCK
2. 查看哪个进程的io比较高:
dstat -top-io
3. 查看哪个进程占用cpu高:
dstat -d -r --top-io
linux 网络性能优化的更多相关文章
- Linux网络性能优化方法简析
Linux网络性能优化方法简析 2010-12-20 10:56 赵军 IBMDW 字号:T | T 性能问题永远是永恒的主题之一,而Linux在网络性能方面的优势则显而易见,这篇文章是对于Linux ...
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
- linux的性能优化
转一位大神的笔记. linux的性能优化: 1.CPU,MEM 2.DISK--RAID 3.网络相关的外设,网卡 linux系统性能分析: top:linux系统的负载,CPU,MEM,SWAP,占 ...
- linux 常用性能优化
linux 常用性能优化 1. 优化内核相关参数 配置文件/etc/sysctl.conf 配置方法直接将参数添加进文件每条一行. sysctl -a可以查看默认配置 sysctl -p 执行并检测是 ...
- 携程App的网络性能优化实践
首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...
- Linux/Android 性能优化工具 perf
/***************************************************************************** * Linux/Android 性能优化工 ...
- 转:携程App的网络性能优化实践
http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ...
- linux网络性能评估
Linux网络性能评估 参考自:自学it网,http://www.zixue.it/. 网络性能评估(1)通过ping命令检测网络的连通性.(2)通过netstat -i 组合检测网络接口状况.(3) ...
- 嵌入式 如何定位死循环或高CPU使用率(linux) 及性能优化
嵌入式 如何定位死循环或高CPU使用率(linux) ln -s /mnt/nfs/_install/usr/bin/sort /usr/bin/sort awk '{print $1,$2,$14, ...
随机推荐
- 使用graphql和apollo client构建react web应用
graphql是一种用于 API 的查询语言(摘自官网). 我们为什么要用graphql? 相信大家在开发web应用的时候常常会遇到以下这些问题:后端更新了接口却没有通知前端,从而导致各种报错:后端修 ...
- Codeforces 702D Road to Post Office(模拟 + 公式推导)
题目链接:http://codeforces.com/problemset/problem/702/D 题意: 一个人要去邮局取东西,从家到达邮局的距离为 d, 它可以选择步行或者开车,车每走 k 公 ...
- (寒假开黑gym)2018 USP Try-outs
layout: post title: (寒假开黑gym)2018 USP Try-outs author: "luowentaoaa" catalog: true tags: m ...
- 杭电oj 1000
今天开始和一个认识的学弟刷题. 学弟是个大牛,我还是个菜鸟.嘿嘿. 杭电第一题我就wrong了好几次. #include <iostream> using namespace std; i ...
- luogu P1026 统计单词个数
题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...
- [Atcoder SHPC2018] Tutorial
Link: SHPC2018 传送门 C: 一道看上去有些吓人的题目,不过$1e9$规模下的$n^m$代表肯定是可以约分的 可以发现能提供贡献的数对只有$2*(n-d)$种,那么总贡献为$2*(n-d ...
- 洛谷 P3803 多项式乘法
题目背景 这是一道FFT模板题 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1 ...
- [CF494D]Birthday
题意:给一棵带边权的树,定义如下的一些东西 $S(x)$表示以$x$为根的子树中的节点组成的集合 $d(u,v)$表示$u$和$v$之间的距离 $f(u,v)\sum\limits_{x\in S(v ...
- 【kd-tree】CDOJ - 1170 - 红与蓝
kd-tree模板题,对红点建立kd-tree,用每个蓝点查询,更新最小值即可. #include<cstdio> #include<cmath> #include<al ...
- 输入输出流和String的混合使用-替换信息
---恢复内容开始--- package demo; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...