Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408785
  • 博文数量: 54
  • 博客积分: 2225
  • 博客等级: 大尉
  • 技术积分: 547
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-23 09:58
文章分类

全部博文(54)

文章存档

2014年(1)

2012年(1)

2011年(33)

2010年(6)

2009年(13)

分类: LINUX

2011-03-17 14:05:41

相信各位系统管理员在做压力测试或者是服务器处于高并发情况下,想了解网络连接的状态时候,经常会使用netstat命令去统计服务器目前的网络连接状态,而在国内使用最多的莫过于下面这条shell语句:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
而使用过这个语句的都知道,执行速度太慢,在一个tcp连接查过3W的机器上,笔者执行这句话时间差不多20秒,要是连接再多点的情况下就更慢了,而且它本身消耗的CPU资源也过多,而作为做系统调优或者是高并发情况下找系统的瓶颈点,错过一秒也许再重现这个场景就很难了。从技术层面上来讲,linux各种统计信息都是通过/proc来获取的,当处理tcp时候用到了一个tcp_diag的功能,什么事tcp_diag呢?tcp_diag是用于诊断和统计tcp协议信息的一个模块。而ss正是采用这个模块实现它的统计速度飞快的原因,下面说说它跟netstat实现相同功能的具体用法:
netstart -nat  #统计所有的TCP连接
ss -t -a         #统计所有的TCP连接
netstart -nau #统计所有的UDP连接
ss -u -a #统计所有的UDP连接
ss还具有过滤功能,下面列一下常用的功能:
ss state ESTABLISHED #列出所有ESTABLISHED状态的连接
ss -t -a -o excl ESTABLISHED #排除所有ESTABLISHED状态的连接
ss state ESTABLISHED sport eq :80 #列出所有在80端口上状态为ESTABLISHED状态的连接
ss state ESTABLISHED sport eq :80 and not dst 127.0.0.1 #列出所有在80端口上状态为ESTABLISHED状态和目的地址不为127.0.0.1的连接
上面只是一些简单的例子,而我在使用过程中,发现它在大连连接的情况下,统计速度快很多,值得向各位推荐使用。另外根据他自己的介绍页面介绍说统计一个3Wsockets连接,采用netstat统计时间需要15.6秒,而采用ss只需要0.47秒。

阅读(2114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~