【Azure Container App】Debug Console的调试工具试验(二)-- lsof/ util-linux / netcat / wget

简介: 本文续讲Azure Container App Debug Console调试工具试验,详解lsof(端口/文件句柄排查)、util-linux(dmesg/mount/df等系统诊断)、netcat(网络连通性测试)及wget(HTTP端点验证)四大工具的实战用法与典型场景,助力高效排障。

文章“【Azure Container App】Debug Console的调试工具指南”中,介绍了12种Azure Contianer App Debug Console模式下预装的调试工具。

文章“【Azure Container App】Debug Console的调试工具试验(一)-- iputils / net-tools / procps” 中,进一步通过试验的方式介绍了前三种工具。

本文继续前文的试验,开始试验  lsof/ util-linux / netcat / wget  这四种工具 。

4. lsof - 文件与端口侦探

lsof(List Open Files)是 Linux 系统中功能最强大的诊断工具之一。在 Unix/Linux 的设计哲学中,"一切皆文件"——不仅普通文件是文件,网络连接、管道、设备、目录等都被抽象为文件。因此,lsof 不仅能查看普通文件的打开情况,还能查看网络连接、管道、设备等所有类型的文件描述符。

在容器故障排查中,lsof 最常用于两个场景:一是查看端口占用情况,二是分析文件句柄泄漏问题。当你需要知道某个端口被哪个进程占用时,lsof -i :8080 可以立即给出答案。当应用报告 "Too many open files" 错误时,lsof -p <PID> 可以列出该进程打开的所有文件,帮助你分析是什么类型的文件描述符被大量打开。

lsof 的输出包含丰富的信息:COMMAND(进程名)、PID(进程 ID)、USER(用户)、FD(文件描述符)、TYPE(类型,如 REG 表示普通文件,IPv4/IPv6 表示网络连接)、DEVICE(设备)、SIZE/OFF(大小/偏移)、NODE(节点)、NAME(文件名或网络地址)。通过分析这些信息,可以深入了解进程的文件和网络活动。

试验指令:

# 查看占用特定端口的进程
lsof -i :80
# 查看某进程打开的所有文件
lsof -p <PID>
# 统计进程打开的文件数量
lsof -p <PID> | wc -l
# 查看所有网络连接
lsof -i
# 查看所有 TCP 连接
lsof -i TCP
# 查看连接到特定主机的进程
lsof -i @10.0.0.1
# 查看特定用户打开的文件
lsof -u username


效果截图:

 

典型场景:

当应用报错 "Too many open files" 或 "Cannot allocate file descriptor" 时,首先使用 lsof -p <PID> | wc -l 统计进程打开的文件数量,然后与系统限制(ulimit -n)对比。

如果确实接近或超过限制,使用 lsof -p <PID> 详细查看打开的文件列表。

如果发现大量 socket 类型的文件描述符,可能是连接池泄漏;

如果发现大量普通文件,可能是日志文件或临时文件没有正确关闭。

 


5. util-linux - 系统管理瑞士军刀

util-linux 是一个庞大的系统管理工具集,包含了数十个实用命令,几乎涵盖了 Linux 系统管理的方方面面。在容器调试场景中,最常用的命令包括 dmesg(查看内核日志)、mount(查看挂载点)、df(查看磁盘使用)、kill(发送进程信号)和 uname(查看系统信息)。

dmesg 命令用于查看内核环形缓冲区中的消息,这些消息包含了系统启动信息、硬件检测、驱动加载以及各种内核级别的事件和错误。在容器环境中,虽然容器与宿主机共享内核,但 dmesg 仍然能够提供有价值的诊断信息。例如,当容器因为内存不足被 OOM Killer 杀死时,相关信息会记录在内核日志中。

ps:dmesg 不可用,没有操作权限,错误消息: read kernel buffer failed: Operation not permitted

mount 命令显示当前系统的所有挂载点。在容器中,你可以看到根文件系统、各种特殊文件系统(如 proc、sys、cgroup)以及通过 Volume 挂载的外部存储。这对于验证存储配置、排查文件访问问题非常有帮助。

df 命令显示文件系统的磁盘空间使用情况。当容器报告磁盘空间不足时,df -h 可以快速定位是哪个文件系统空间不足。在容器环境中,需要特别关注 / 根文件系统和挂载的持久化存储的使用情况。

试验指令:

# 查看内核日志(最后 50 行)
dmesg | tail -50
# 查看内核日志中的错误和警告
dmesg --level=err,warn
# 持续监控内核日志(实时显示新消息)
dmesg -w
# 查看所有挂载点(格式化输出)
mount | column -t
# 查看磁盘使用情况(人类可读格式)
df -h
# 查看系统信息
uname -a
# 优雅终止进程(SIGTERM)
kill -15 <PID>
# 强制终止进程(SIGKILL)
kill -9 <PID>


效果截图:

 

典型场景:

当容器突然崩溃或出现异常行为时,dmesg 是第一个要查看的地方。如果看到 "Out of memory: Kill process" 相关日志,说明容器内存配置不足,需要增加内存限制或优化应用内存使用。

如果看到 "segfault" 相关信息,说明应用存在内存访问错误,可能是程序 bug 或依赖库问题。

如果看到磁盘 I/O 错误,需要检查存储系统的健康状况。

 


6. netcat (nc) - 网络连接瑞士军刀

netcat(简称 nc)被誉为网络工具中的"瑞士军刀",它可以建立几乎任何类型的网络连接。无论是测试 TCP/UDP 端口连通性、创建简单的客户端/服务端、传输数据,还是进行端口扫描,netcat 都能轻松胜任。它是网络调试中最灵活、最实用的工具之一。

netcat 的核心能力是建立 TCP 或 UDP 连接并在连接上读写数据。在最简单的使用场景中,你可以用 nc -zv host port 测试端口是否可达:-z 表示零 I/O 模式(只测试连接,不发送数据),-v 表示详细输出。这比 telnet 更加简洁高效,是验证网络连通性的首选方法。

netcat 还可以作为简单的服务器使用。通过 nc -l -p 8080 可以在 8080 端口启动一个监听服务,任何连接到该端口的数据都会显示在终端上。这对于测试网络配置、验证防火墙规则非常有用。你甚至可以用它来创建简单的 HTTP 服务器或进行文件传输。

在进行 HTTP 测试时,netcat 可以发送原始的 HTTP 请求。通过 echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80 可以手工构造并发送 HTTP 请求,查看服务器的原始响应。这对于调试 HTTP 协议问题、验证反向代理配置非常有帮助。

试验指令:

# 测试 TCP 端口连通性
nc -zv target-host 443
# 设置连接超时(5 秒)
nc -w 5 -zv target-host 3306
# 测试 UDP 端口
nc -u -zv target-host 53 
# 简单的端口扫描(扫描常用端口)
nc -zv target-host 22 80 443 3306 6379

效果截图:

典型场景:

当应用无法连接数据库或外部 API 时,使用 nc -zv db-host 3306 可以快速验证网络层面是否可达。

如果 nc 连接成功(显示 "succeeded"),说明网络是通的,问题可能在应用层(如认证失败、TLS 配置错误);

如果 nc 连接失败(显示 "Connection refused" 或 "Connection timed out"),问题在网络层面,需要检查防火墙规则、网络策略或目标服务是否运行。

这种由底层向上的排查方法能快速缩小问题范围。

 


7. wget - HTTP/HTTPS 测试专家

wget 是一个功能完善的命令行下载工具,支持 HTTP、HTTPS、FTP 协议。与 curl 相比,wget 的语法更加简单直观,特别适合快速测试和下载任务。在容器调试中,wget 常用于测试 HTTP 端点可达性、验证 SSL/TLS 配置、下载配置文件等场景。

wget 的一个独特优势是 --spider 模式,它只检查目标是否存在而不实际下载内容。结合 -S 参数可以显示服务器返回的 HTTP 响应头,这对于验证服务状态、检查重定向、分析 HTTP 响应码非常有用。例如,wget --spider -S https://api.example.com/health 可以快速验证健康检查端点是否正常响应。

在处理 HTTPS 连接时,wget 提供了灵活的证书验证选项。默认情况下,wget 会验证服务器证书的有效性。如果遇到证书问题(如自签名证书、证书过期、域名不匹配),可以使用 --no-check-certificate 参数临时绕过验证,以便确定问题是证书相关还是网络相关。当然,这个参数只应在调试时使用,生产环境中应该确保证书配置正确。

wget 还支持设置各种 HTTP 头、超时时间、重试次数等参数,可以模拟各种客户端行为进行测试。-qO- 是一个常用的组合,表示安静模式(-q)并将内容输出到标准输出(-O-),适合在脚本中使用或快速查看响应内容。

试验指令:

# 检查 HTTP 端点状态(显示响应头)
wget --spider -S http://api-server/health
# 下载文件
wget https://example.com/config.json
# 忽略 SSL 证书错误(仅调试用)
wget --no-check-certificate https://internal-api/
# 设置超时时间(10 秒)
wget --timeout=10 http://slow-api/
# 将响应内容输出到标准输出
wget -qO- http://api/health
# 带自定义 Header 的请求
wget --header="Authorization: Bearer token" http://api/
# 显示详细的调试信息
wget -v http://target-url/


效果截图:

典型场景:

当需要验证容器能否访问外部 HTTP 服务时,wget --spider -S https://target-api/ 是最快的方法。

从响应头中可以获取大量诊断信息:HTTP 状态码(200 正常、4xx 客户端错误、5xx 服务器错误)、重定向位置(Location 头)、服务器类型、内容类型等。

如果遇到 SSL 错误,先用 --no-check-certificate 绕过验证,确认是证书问题还是网络问题,然后再用 openssl 进一步诊断证书问题。

 

 

 

<第二部分完,请持续关注第三部分,谢谢>

 

 

参考资料

Connect to a container debug console in Azure Container Apps :  https://learn.microsoft.com/en-us/azure/container-apps/container-debug-console?tabs=bash#built-in-tools-in-the-debug-console

 

 


当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
1月前
|
人工智能 JavaScript Shell
AgentRun实践指南:Agent 的宝藏工具—All-In-One Sandbox
AgentRun 推出 All-In-One Sandbox(AIO),一体化集成浏览器、Shell 与代码执行环境,统一文件系统、零配置云上运行。启动快(5秒)、文件访问毫秒级、内存减半,完美支持多步骤自动化、LLM Agent 及人机协同任务。
|
2月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
28205 227
|
1月前
|
运维 监控 Cloud Native
巨人网络《超自然行动组》携手阿里云打造云原生游戏新范式
通过 ACK(容器服务)、ESS(弹性伸缩)、网络型负载均衡 NLB、OpenKruiseGame(OKG)、SLS(日志服务)、ARMS(应用实时监控服务)、阿里云原生防护(Native Protection),以及云原生数据库 polardb 和 Redis 的深度协同,巨人网络构建了一套高弹性、高可用、低成本、智能化、高安全且高性能数据处理能力的新一代游戏基础设施,为行业树立了云原生落地的标杆。如今,随着日活跃用户(DAU)突破千万大关,这套技术体系,已经成为游戏行业“云原生转型”的标杆案例。
482 22
|
1月前
|
Ubuntu Linux Docker
超全 Docker 镜像源配置指南|Windows/Mac/Linux一键搞定,拉镜像再也不卡顿
Docker拉取官方镜像慢到离谱,要么超时报错,要么中途断连,折腾半天连基础镜像都拉不下来,直接拖慢整个开发进度。 其实解决办法很简单——配置专属镜像源!今天给大家带来镜像源全平台配置教程,覆盖Linux(Ubuntu/CentOS通用)、Windows/Mac版Docker Desktop,甚至Mac专属轻量工具OrbStack,一步一图+命令复制即用,彻底告别镜像拉取卡顿!
2332 9
|
1月前
|
Arthas 运维 监控
线上 JVM 故障秒解:Arthas 高阶用法与全链路定位实战指南
本文介绍阿里巴巴开源的Java诊断工具Arthas在线上JVM故障排查中的核心应用。针对CPU飙高、FullGC频繁、接口超时等常见问题,Arthas提供无需重启服务的热修复能力,包括方法热替换(trace/watch/tt命令)、线程问题定位(thread命令)、内存分析(heapdump)等核心功能。文章通过真实案例演示全链路排查流程,并给出安全使用建议,帮助开发者快速定位和解决线上问题,实现从被动救火到主动定位的转变。Arthas的字节码增强技术可实时监控JVM状态,是提升线上问题排查效率的利器。
437 1
|
1月前
|
缓存 负载均衡 Linux
Linux内核驱动开发的技术核心精要
本文精讲嵌入式Linux驱动开发五大核心:并发同步(自旋锁/mutex等)、中断分层(顶/底半部与亲和性)、DMA内存管理(一致性/流式映射与屏障)、设备树与驱动模型、调试移植技巧(ftrace/kgdb等),适配Linux 6.13新特性,助力开发者写出健壮高效驱动。(239字)
472 164
|
2月前
|
JSON 缓存 API
美股实时行情与 K 线数据对接
本文详解如何用StockTV全球金融API快速接入美股实时行情、K线、指数及IPO等数据,支持NYSE/NASDAQ双交易所,提供REST/WS低延迟接口,涵盖个股、指数、涨跌榜等全场景,助开发者高效构建全球资产配置工具。(239字)
|
2月前
|
人工智能 弹性计算 Cloud Native
【云故事探索】NO.19:阿里云 × 闪剪智能:AI 原生重塑视频创作
深圳闪剪智能,12年打磨短视频工具、5年深耕AI,国内数字人先行者,服务全球3亿用户。携手阿里云,以ACK弹性计算、全球加速与FinOps体系,破解高并发与成本难题,打造AI原生视频创作引擎。