linux-node_exporter突然挂掉(couldn‘t get dbus connection)

文章描述了一台机器收到挂掉告警后,通过检查系统日志发现9100端口被大量占用,导致node_exporter服务启动失败的问题。问题根源在于系统中存在两个占用9100端口的node_exporter服务,这引发了DBUS连接数超过限制。解决方案包括清理DBUS连接,停止并移除多余的node_exporter服务实例。

一、背景

突然收到一台机器挂掉的告警,去上面查看发现机器正常,uptime正常,没有重启情况,UID 20029的用户是tidb,su - tidb的时间较长,node_exporter有如下报错

couldn't get units: couldn't get dbus connection: The maximum number of active connections for UID 20029 has been reached" source="collector.go:13

二、排查

1.检查系统日志

cat  /var/log/syslog
# 这里发现了大量的9100端口被占用,然后导致node_exporter启动失败的情况
Apr 20 06:07:26 timon-test01eu-p001 node_exporter[17353]: ts=2023-04-20T06:07:26.413Z caller=node_exporter.go:202 level=error err="listen tcp 0.0.0.0:9100: bind: address already in use"
Apr 20 06:07:26 timon-test01eu-p001 systemd[1]: node_exporter.service: Main process exited, code=exited, status=1/FAILURE
Apr 20 06:07:26 timon-test01eu-p001 systemd[1]: node_exporter.service: Unit entered failed state.
Apr 20 06:07:26 timon-test01eu-p001 systemd[1]: node_exporter.service: Failed with result 'exit-code'.
Apr 20 06:07:27 timon-test01eu-p001 systemd[1]: node_exporter.service: Service hold-off time over, scheduling restart.
Apr 20 06:07:27 timon-test01eu-p001 systemd[1]: Stopped Prometheus Node Exporter.
Apr 20 06:07:27 timon-test01eu-p001 systemd[1]: Started Prometheus Node Exporter.
Apr 20 06:07:27 timon-test01eu-p001 systemd[1]: Failed to propagate agent release message: Operation not supported
Apr 20 06:07:27 timon-test01eu-p001 node_exporter[17360]: ts=2023-04-20T06:07:27.675Z caller=node_exporter.go:182 level=info msg="Starting node_exporter" version="(version=1.3.1, branch=HEAD, revision=a2321e7b940ddcff26873612bccdf7cd4c42b6b6)"
Apr 20 06:07:27 timon-test01eu-p001 node_exporter[17360]: ts=2023-04-20T06:07:27.675Z caller=node_exporter.go:183 level=info msg="Build context" build_context="(go=go1.1
<think> 嗯,用户这次问的是PGSROM程序及相关文件的功能和使用方法。从用户提供的引用内容来看,之前讨论的是U-Boot链接脚本和NAND Flash操作,但这次明显转向了另一个工具链。用户可能是嵌入式开发工程师,正在处理ROM烧录或固件调试工作。 PGSROM这个名称看起来像是某种编程工具(Programmer for SROM),SROM通常指串行ROM。用户列出的文件类型很专业:.DAT可能是数据文件,.LOG是日志,.MAX可能存储地址上限,DUMP.DAT显然是数据提取文件。需要解释清楚这套工具链的工作流程。 注意到用户上次的问题涉及U-Boot和NAND操作,可能是在开发嵌入式系统。PGSROM应该是用于生成或烧录启动ROM的工具,比如生成BIOS固件或bootloader。SROM.DAT作为核心固件数据,ADDR.MAX记录内存映射,这种设计在嵌入式开发中很常见。 特别要注意ADDR.LOG和SROM.LOG的区别:前者是编程操作时产生的物理地址记录,后者是固件自身运行时的调试输出。这种分离设计有利于区分烧录过程和运行时问题。DUMP.DAT的功能需要谨慎描述,因为内存转储既可能用于备份也可能用于逆向分析。 用户没有说明具体芯片平台,但提到的文件扩展名.dat/.log在x86和ARM体系都通用。使用示例应该保持硬件中立,重点展示命令行交互逻辑而非具体地址值。最后生成的问题要覆盖典型痛点:比如如何调试校验失败、如何定制内存映射——这都是嵌入式工程师实际会遇到的障碍。 </think> PGSROM 程序及其相关文件主要用于 **嵌入式系统的串行ROM(SROM)编程、调试和数据管理**,常见于Bootloader开发、固件烧录、内存区域操作和调试场景。以下是各文件的核心功能和使用详解: --- ### **1. PGSROM (主程序)** * **功能**: * **SROM编程**:将编译好的固件(如 `SROM.DAT`)写入目标设备的串行ROM。 * **内存操作**:读取、擦除、写入设备特定内存区域(如 `nand erase`, `nand write`)。 * **调试支持**:控制执行流程,设置断点,单步跟踪。 * **数据交互**:通过命令与目标设备通信(如 `yy=` 开头的自定义命令序列[^2])。 * **日志管理**:生成操作日志(`SROM.LOG`, `ADDR.LOG`)。 * **使用方法**: * 通常通过**命令行参数**或**交互式命令终端**调用。 * **示例**: ```bash # 烧录 SROM.DAT 到指定地址 PGSROM -p 0x00000000 -f SROM.DAT # 擦除 NAND 从 0x250000 开始的 0x3DB0000 字节 PGSROM -e nand -a 0x250000 -s 0x3DB0000 # 执行自定义命令序列(如引用[2]中的 yy=...) PGSROM -c "yy=t 0x30000000 rootyaffs2.img;nand erase 0x250000 0x3db0000;nand write.yaffs2 0x30000000 0x250000 $(filesize)" ``` --- ### **2. SROM.DAT** * **功能**:存放**待烧录到串行ROM的二进制固件**(如Bootloader、初始化代码)。内容通常由编译器生成(如 `start.o`, `cpu_init.o` 等链接后的机器码[^1])。 * **使用场景**: * 作为 `PGSROM -p` 命令的输入文件,写入目标设备。 * 固件更新或量产烧录时使用。 --- ### **3. ADDR.MAX** * **功能**:定义**内存操作的地址范围上限**(如 `0x3DB0000`)。用于防止越界操作。 * **使用场景**: * 在执行擦除/写入命令时,程序依据此文件校验地址是否有效。 * 确保操作不超出物理内存或存储边界。 --- ### **4. ADDR.LOG** * **功能**:记录 **PGSROM 操作中访问的内存地址**(如擦除 `0x250000`,写入 `0x30000000`[^2])。 * **使用场景**: * **调试追踪**:分析程序对内存的读写行为。 * **操作审计**:验证烧录/擦除的地址是否符合预期。 --- ### **5. SROM.LOG** * **功能**:存储 **PGSROM 执行过程的详细日志**,包括: * 命令执行结果(成功/失败)。 * 错误信息(如校验失败、超时)。 * 设备响应数据。 * **使用场景**: * 排查烧录失败原因。 * 监控程序运行状态。 * 审计操作历史。 --- ### **6. DUMP.DAT** * **功能**:**从设备内存中提取的数据快照**(如通过 `PGSROM -d` 命令导出)。 * **使用场景**: * 验证烧录内容是否与 `SROM.DAT` 一致。 * 调试时分析设备内存状态。 * 备份特定内存区域数据。 --- ### **典型工作流** 1. **准备固件**:编译生成 `SROM.DAT`。 2. **配置地址**:设定 `ADDR.MAX` 限制操作范围。 3. **执行操作**:用 PGSROM 烧录固件(`-p`)或操作内存(`-e`, `-w`)。 4. **记录日志**:操作过程写入 `ADDR.LOG` 和 `SROM.LOG`。 5. **验证数据**:通过 `DUMP.DAT` 对比烧录结果。 6. **调试分析**:根据日志排查问题。 --- ### **注意事项** 1. **权限要求**:PGSROM 通常需**管理员权限**访问硬件接口。 2. **地址对齐**:操作地址需按设备要求对齐(如 4 字节对齐 `ALIGN(4)`[^1])。 3. **文件依赖**:`SROM.DAT` 和 `ADDR.MAX` 是输入文件;`ADDR.LOG`, `SROM.LOG`, `DUMP.DAT` 是输出文件。 4. **命令风险**:错误的擦除/写入命令可能导致设备变砖! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值