一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态,

[root@localhost unix]#  ss -auxp |grep -i server.o
u_str LISTEN 0 20 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB 0 0 * 59169156 * 59169157 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 59169156 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str ESTAB **9** 0 server.socket 59714017 * 59682769 users:(("server.o",pid=45578,fd=8))

比如最后一行的9,就说明有9个字节的数据还在内核中,没有recv。

那么,当看到为0的时候,是不是说明一定不在内核中呢?答案是否定的。

同样的环境,我们将unix_diag模块卸载掉,然后重新读取,发现还是能看到 :

[root@localhost /]# lsmod |grep unix
unix_diag 12601 0 [root@localhost unix]# rmmod unix_diag
[root@localhost unix]#
[root@localhost unix]#
[root@localhost unix]# lsmod |grep unix_diag

然后卸载之后,再用ss去查看一下,发现输出没有变化:

[root@localhost unix]#  ss -auxp |grep -i server.o
u_str LISTEN 0 20 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB 0 0 * 59169156 * 59169157 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 59169156 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str ESTAB **9** 0 server.socket 59714017 * 59682769 users:(("server.o",pid=45578,fd=8))

这个时候查看一下模块,发现又被加载进去了,

[root@localhost /]# lsmod |grep unix
unix_diag 12601 0

原来ss会去加载对应的 unix_diag模块。

我们将 mv unix_diag.ko.xz unix_diag.ko.xz_bak ,改名,然后再次获取:

[root@localhost unix]# ss -auxp |grep -i server.o
u_str ESTAB 0 0 * 59169156 * 0 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 0 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str LISTEN 0 0 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB **0** 0 server.socket 59714017 * 0 users:(("server.o",pid=45578,fd=8))

发现读不到数据了,最后一行从9 变成了0.

因为unix域的数据在ss中展示,需要读取:

sk_diag_show_rqlen 这个函数,而如果没有加载 unix_diag,则会默认显示为0.

对于大量使用unix域通信的os,建议默认开启: CONFIG_UNIX_DIAG

ss 显示unix 域 的socket 缓冲区不正确的更多相关文章

  1. Linux IPC udp/tcp/UNIX域 socket编程

    UNIX域套接字本地通信即在socket第一个参数中选择AF_LOCAL,socket是BSD提出的一种适用于所有的情况的进程间通信的方式,虽然现在多用于网络通信,但是本机内的进程间通信也是没有问题的 ...

  2. Socket编程实践(13) --UNIX域协议

    UNIX域协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答 ...

  3. unix域源码解析

    首先我们先要创建一个用于通信的结构unix_proto_data ,并初始化某些字段 static int unix_proto_create(struct socket *sock, int pro ...

  4. ss命令结合zabbix对socket做监控

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 最近天冷了,socket也出问题了,一直没有做监控,现在就把监控加起来,目前我们使用的有z ...

  5. 《Unix 网络编程》15:Unix 域协议

    Unix 域协议 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 本 ...

  6. Socket缓冲区探讨,是否有拆包的方式?

    Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...

  7. UNIX域协议(命名套接字)

    这里主要介绍命名UNIX域套接字 1.什么是UNIX域套接字Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式.是进程间通信(IPC)的一种方式.它提供了两类套接字:字 ...

  8. UNIX域协议(无名套接字)

    关于什么是UNIX域套接字可以参考:http://www.cnblogs.com/xcywt/p/8185597.html这里主要介绍非命名的UNIX域套接字的用法.1.socketpair函数先看m ...

  9. UNIX网络编程——Socket通信原理和实践

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

随机推荐

  1. markdowm使用学习

    markdowm学习 标题(#/##/###/####) 三级标题 四级标题 字体(*/) hello world! hello world! hello world! hello world! he ...

  2. Linux安装netstat命令

    Linux安装netstat命令 1.查找netstat命令所属的依赖包 [root@localhost ~]# yum provides netstat netstat命令的安装包为net-tool ...

  3. JS:三目运算符

    语法:条件表达式?表达式1:表达式0 注:当条件表达式为true则选择表达式1,反之false则选择表达式0 例: var a = 0; var b = 1; re=a>b?a:b consol ...

  4. JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!

    序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...

  5. RPA跨系统自动生成采购订单

    1.从开发器启动机器人 2.RPA登录友采云 3.RPA根据筛选条件,导出采购订单 4.RPA请并登录NC 5.RPA把读取到的数据,逐个录入到NC系统中,并存储到Excel中 6.RPA将最终的Ex ...

  6. IP寻址与规划

    一.IP寻址和子网划分 IP地址的主机部分可被分为三种地址:网络地址.主机地址和定向广播地址. 网络地址是网络号中的第一个地址.它用来将网络内的其他所有网段唯一标识为一个网段或广播域.定向广播地址是网 ...

  7. 用 PyQt5 快速构建一个简单的 GUI 应用

    1. 介绍 Python GUI 常用的 3 种框架是:Tkinter.wxpython.PyQt5 PyQt5 基于 Qt,是 Python 和 Qt 的结合体,可以用 Python 语言编写跨平台 ...

  8. HDFS数据平衡

    一.datanode之间的数据平衡 1.1.介绍 ​ Hadoop 分布式文件系统(Hadoop Distributed FilSystem),简称 HDFS,被设计成适合运行在通用硬件上的分布式文件 ...

  9. Min_25 筛与杜教筛

    杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...

  10. 官宣!微软发布 VS Code Server!

    北京时间 2022 年 7 月 7 日,微软在 VS Code 官方博客中宣布了 Visual Studio Code Server! 远程开发的过去与未来 2019 年,微软发布了 VS Code ...