性能文章>利用 Xpocket 的 ss 插件获取 socket 信息>

利用 Xpocket 的 ss 插件获取 socket 信息原创

7月前
182302

xpocket目前集成了ss插件,ss用来替代netstat的,可以用来获取socket统计信息,它可以显示和netstat类似的内容。 但ss的优势在于它能够显示更多更详细的有关tcp和连接状态的信息,而且比netstat更快速更高效。当然netstat 也有自己的特点,netstat 除了显示socket信息外还可以显示接口 snmp等统计信息。

ss比netstat快的主要原因是,netstat需要遍历/proc下面每个pid目录,而ss利用了tcp协议栈中tcp_diag。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。当服务器的socket连接数量非常大时,无论是使用netstat命令需要遍历的目录非常多导致执行速度都会很慢,相比之下ss则不存在这个问题速度还是非常的快。

我们看一下我们使用ss插件的-ti参数查看一下tcp的详细信息:
图片1.png

可以看到很多tcp连接的详细信息,包括 cwnd 也就是慢启动窗口, tcp的rtt 时间等等, 其中的recv-q 和 send-q 可以看到tcp服务的负载状况,

对于listen状态下的tcp来说 send-q 和 recv-q 跟普通的 estab 状态下的有所区别:
recv-q:表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值。
send-q: 表示的则是最大的 listen backlog 数值

在tcp服务发生无法建连时可以通过查看该listen状态下的 recv-q 数量是否异常, 我们通过一个python程序模拟一下:

#! /usr/bin/python
# a simple tcp server
import socket,os,time

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 9000))
sock.listen(2)
while True:

    time.sleep(6000)
    connection,address = sock.accept()
    print 'new connect: ',connection.fileno() ,address
    
    buf = connection.recv(10240)
    print 'get data len=',len(buf) ,'data: '+ buf

    connection.send(buf)
    connection.close()
    print 'connect close'

可以看到tcp的连接队列被设置成 2
图片2.png

我们使用 nc 127.0.0.1 9000 命令连接该服务,在第三个连接时,Ncat: Connection reset by peer 提示服务端拒绝了该请求。

通常来说对于listen socket recv-q 里一般是0的状态,否则说明accept里有新的请求未及处理,出现积压,特殊情况下 recv-q 被占满导致新的请求无法建立。recv-q 是观察服务端健康状态一个非常关键的指标。

ss 插件在定位tcp 服务问题时非常方便好用,可以打印出tcp连接的详细信息,服务端的负载状态,tcp客户端建连状态等等, 可以统计close_wait, time_wait 等状态tcp 连接的数量,确定系统服务状态是否正常。

请先登录,再评论

暂无回复,快来写下第一个回复吧~

为你推荐

JVM 源码分析之一个 Java 进程究竟能创建多少线程
概述虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从 JVM 源码角度来分析,更多的来自于 Linux Kernel 的源码分析,今天要说的是 JVM 里比较常见的一个问题。这个问题可能有
线程池运用不当的一次线上事故
在高并发、异步化等场景,线程池的运用可以说无处不在。线程池从本质上来讲,即通过空间换取时间,因为线程的创建和销毁都是要消耗资源和时间的,对于大量使用线程的场景,使用池化管理可以延迟线程的销毁,大大提高
YGC问题排查,又让我涨姿势了!
在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务
【活动结果公布:兑奖见置顶评论】每日一签到,解锁你的PerfMa壕礼
叮......Perfma达人福利发车啦!社区每日签到解锁活动上线啦~除了每日签到必得积分奖励外,还为大家增加了壕礼相赠、解锁Perfma终极大奖等环节奖励 ~来Perfma社区留下你的签到足迹,告诉
使用Top_X插件排查内存过载问题
Top命令是Linux 系统下常用的监控工具,用于实时获取进程级别的 CPU 或内存使用情况。XPocket中的Top_X为Linux Top的增强版,可以显示CPU占用率/负载,CPU及内存进程使用
记一次Synchronized关键字使用不合理,导致的多线程下线程阻塞问题排查
在为客户进行性能诊断调优时,碰到了一个Synchronized关键字使用不合理导致多线程下线程阻塞的情况。用文字记录下了问题的整个发现-排查-分析-优化过程,排查过程中使用了我司商业化产品——XLan
记一次类加载失败导致线程阻塞问题排查
作为PerfMa解决方案管理部门的技术专家,我在工作遇见过很多各种问题导致的性能问题,并参与了为客户的系统进行性能诊断调优的全过程。这一次碰到了一个类加载失败导致的性能问题。用文字记录下了问题的整个发
一次大量 JVM Native 内存泄露的排查分析(64M 问题)
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助。会涉及到下面这些内容Linux 经典的 64M 内存问题堆内存分析、Native 内存分析的基本套路