ss -xl 是什么
Unix 域套接字是同一台机器上进程间的通信方式,数据库、PHP-FPM、Docker 守护进程、systemd 都大量使用它。它的特点是速度快、不需要 TCP 端口,因此『服务没起来』的结论常常下错:进程确实在监听,只不过监听在 socket 文件上。ss 加 -x 查看 Unix 套接字,加 -l 只看监听状态,加 -p 关联进程。
基本信息
| 适用平台 | Linux(iproute2 的 ss)、macOS(netstat 或 lsof) |
|---|---|
| 关键选项 | -x Unix 域套接字、-l 只看监听、-p 显示进程 |
| 地址形态 | Local Address 位置显示的是 socket 文件路径 |
| 常见对象 | mysqld.sock、php-fpm.sock、docker.sock、systemd 套接字 |
典型使用场景
- 数据库连不上:确认是否通过 socket 文件通信而非 TCP 端口
- PHP-FPM 502:确认池监听的 socket 路径与 Web 服务器配置是否一致
- 容器与宿主通信:确认 docker.sock 是否存在与挂载
- 权限问题排查:socket 文件的属主与权限决定谁能连接
- 端口耗尽分析:确认某些服务走本地套接字而完全不占端口
查看 Unix 套接字
查看 Unix 套接字
# 列出所有监听中的 Unix 套接字
ss -xl | head -20
# 关联进程,快速定位是哪个服务
ss -xlp | grep -iE 'mysql|php|docker'
# 直接确认 socket 文件是否存在与权限
ls -l /run/mysqld/mysqld.sock
# 只要监听状态
ss -xl state listening判读要点
| 观察项 | 含义 | 常见问题 |
|---|---|---|
| Local Address | socket 文件路径 | 与配置中写的路径不一致即连不上 |
| 进程关联 | 监听该 socket 的进程 | 没有进程说明服务未启动 |
| 文件权限 | 属主与读写位 | Web 进程无权限导致连接被拒 |
| 文件不存在 | 服务未创建或已被删除 | 服务重启或目录被清理 |
socket 文件路径长度存在上限(常见的 sun_path 上限约 108 字节):路径过深过长会导致绑定失败,容器里挂载长路径目录时尤其容易踩到。
容器与宿主机互相看不到对方的 socket 文件:跨命名空间直接用宿主机路径去连容器内的 socket 必然失败,需要显式挂载或改用网络方式通信。