首页 文章 精选 留言 我的

精选列表

搜索[linux],共10000篇文章
优秀的个人博客,低调大师

Linux 服务器磁盘空间告警排查:从 df 到 lsof 的完整流程

云服务器磁盘使用率告警是最常见的运维事件之一。本文整理一套按顺序执行的排查流程,覆盖空间被大文件占用、inode 耗尽、文件已删除但空间未释放三类典型原因,命令均可直接复现。 ## 1. 先确认是空间还是 inode `df -h` 看空间,`df -i` 看 inode。两者任一接近 100% 都会导致写入失败。 ``` df -hT df -i ``` - `Use%` 高而 `IUse%` 低:大文件占用,进入第 2 步。 - `IUse%` 高而 `Use%` 低:小文件过多(会话、缓存、邮件队列),进入第 4 步。 - 两者都不高但应用仍报错:检查是否为只读挂载或配额限制。 ## 2. 逐级定位大目录 从根目录开始,用 `-x` 限制在同一文件系统内,避免扫描到其它挂载点。 ``` du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15 # 选出最大的目录后继续下钻 du -xh --max-depth=1 /var 2>/dev/null | sort -rh | head -15 ``` 常见元凶:`/var/log`、`/var/lib/docker`、`/tmp`、应用自身的 `logs` 目录、数据库 binlog。 找出单个大文件: ``` find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null ``` ## 3. du 与 df 不一致:已删除但仍被进程持有的文件 现象:`rm` 删了大日志,`df` 却没降。原因是进程仍持有该文件描述符,空间在进程关闭文件前不会释放。 ``` lsof +L1 | grep -i deleted # 或者 lsof -nP | grep '(deleted)' | sort -k7 -n -r | head ``` 处理方式: - 首选重启或让进程重新打开日志(如 `systemctl reload nginx`、发送 `USR1` 信号,视程序而定)。 - 无法重启时,可清空文件描述符指向的内容: ``` # 与 取自 lsof 输出 : > /proc//fd/ ``` 清空前确认该文件确实无需保留。 ## 4. inode 耗尽的定位 统计各子目录的文件数量: ``` for d in /var/*; do echo "$(find "$d" -xdev 2>/dev/null | wc -l) $d"; done | sort -rn | head ``` 找到目录后确认是否为可清理的临时数据,再分批删除。目录内文件极多时,`rm -rf *` 可能报参数过长,改用: ``` find /path/to/dir -type f -mtime +7 -delete ``` ## 5. 常见清理动作 - 日志:配置 `logrotate`,设置 `rotate`、`size`、`compress`;systemd 日志用 `journalctl --vacuum-size=500M`。 - Docker:`docker system df` 查看占用,确认后用 `docker system prune`(会删除停止的容器与悬空镜像,执行前核对)。 - 包缓存:`apt clean` 或 `yum clean all`。 - 数据库:按业务策略清理 binlog,不要直接 `rm` 数据文件。 ## 6. 预防 - 在云监控中为磁盘使用率配置告警,阈值建议留出处理时间(具体指标与配置入口以控制台为准)。 - 日志目录独立挂载数据盘,避免写满系统盘。 - 数据盘容量不足时,可按云平台文档扩容云硬盘并扩展文件系统,操作前先做快照。 ## 小结 排查顺序:`df -h/-i` 判类型 → `du` 下钻定位 → `lsof +L1` 排查已删除未释放 → 清理并配置轮转与告警。删除操作前务必确认文件用途,生产环境先快照或备份。

优秀的个人博客,低调大师

SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(下)

#### 3.3.3关键代码 (1)解析传递参数。 ![](https://developer.qcloudimg.com/http-save/8546319/8fb4cd7754fd56dcb3b9b2ecd9af565f.png) (2)初始化CAN FD接口。 ![](https://developer.qcloudimg.com/http-save/8546319/1dc4ca56dfad8b080ddbd347c9c95ade.png) (3)发送端。 ![](https://developer.qcloudimg.com/http-save/8546319/c3088be8cbef86e99b12e2052312919f.png) ![](https://developer.qcloudimg.com/http-save/8546319/60a63352f72418d9b71835aada9a0da7.png) (4)接收端。 ![](https://developer.qcloudimg.com/http-save/8546319/96aa1a4d129bbec467ea72e94f0de3b3.png) ![](https://developer.qcloudimg.com/http-save/8546319/11298955bd162feec9af351d436ad7cf.png) (5)校验接收到的数据信息。 ![](https://developer.qcloudimg.com/http-save/8546319/4762cdb137b124cd3c9daf97e0131056.png) (6)打印接收到的数据信息。 ![](https://developer.qcloudimg.com/http-save/8546319/4aff228a5eeaedd39a1a29faf0b8d6a6.png) ## **3.4 tcp_udp案例** ### 3.4.1案例功能 本案例主要实现客户端(client)与服务端(server)的文本数据相互收发功能。本案例包含4个程序: (1)tcp_server:TCP服务端测试程序。 (2)tcp_client:TCP客户端测试程序。 (3)udp_server:UDP服务端测试程序。 (4)udp_client:UDP客户端测试程序。 程序流程如下图所示。 ![](https://developer.qcloudimg.com/http-save/8546319/6dfc22da463168b46026f8fb58635fc4.png) ![](https://developer.qcloudimg.com/http-save/8546319/6dfc22da463168b46026f8fb58635fc4.png) 服务端和客户端程序均可在单板机、PC机Ubuntu系统上运行。本章节采用单板机本地回环测试,即服务端与客户端程序均在单板机上运行,通过127.0.0.1进行本地回环测试,无需经过路由器。案例bin目录下的4个文件均为ARM端可执行程序。 ### 3.4.2 操作说明 将本案例bin目录下的4个可执行程序拷贝至单板机文件系统。 在Ubuntu中执行如下命令使用OpenSSH登录单板机文件系统,如下图所示。 Host# sudo ssh root@192.168.12.9 //192.168.12.9为单板机IP地址,请根据实际情况修改 ![](https://developer.qcloudimg.com/http-save/8546319/b750befee2da4bbc923cf3aa88ecbd07.png) (1)TCP通信测试 在可执行程序所在目录执行如下命令,分别在单板机运行TCP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。 Target# ./tcp_server 2233 //TCP服务端命令 Host# ./tcp_client 127.0.0.1 2233 //TCP客户端命令 程序执行后,客户端将会连接服务端。在服务端(Target)输入字符串"Tronlong",按下回车键即可在客户端显示对应内容。在客户端(Host)输入字符串"Hello Tronlong",按下回车键即可在服务端显示对应内容,如下图所示。 ![](https://developer.qcloudimg.com/http-save/8546319/3a562ce4bbf152ffd6ec1a0ec62dcd5e.png) ![](https://developer.qcloudimg.com/http-save/8546319/9501ef7c8cc5c2e5b66814f27c266334.png) (2)UDP通信测试 在可执行程序所在目录执行如下命令,分别在单板机运行UDP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。 Target# ./udp_server 2233 //UDP服务端命令 Host# ./udp_client 127.0.0.1 2233 //UDP客户端命令 程序执行后,客户端将不会自动连接服务端。服务端在收到客户端信息前无法得知客户端的存在,因此需要客户端先向服务端发送信息。 在客户端(Host)输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端(Target)输入字符串"Hello Tronlong",按下回车键即可在客户端显示对应内容,如下图所示。 ![](https://developer.qcloudimg.com/http-save/8546319/e21222b3aef4231e2dcdfe464f9c24f8.png) ![](https://developer.qcloudimg.com/http-save/8546319/925d852cd4991272aeb118320d2aad52.png) 如需在PC机Ubuntu系统运行服务端或客户端程序,请将案例src源码目录拷贝至Ubuntu工作目录。进入源码目录后执行make命令,即可在当前目录下生成x86端可执行程序。在不同终端运行服务端或客户端程序的命令类似,但127.0.0.1需使用服务器IP地址替代。 Host# make clean Host# make CC=gcc ![](https://developer.qcloudimg.com/http-save/8546319/15fa3396a56ff89d0f5034f6225eb3bc.png) ### 3.4.3 关键代码 以TCP通信程序为例。 (1)tcp_client.c 注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv等数据结构和系统调用的使用。 (2)tcp_server.c 注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv、bind、listen、accept等数据结构和系统调用的使用。 ## **4 Python开发案例** 我司提供的Python开发案例位于产品资料“4-软件资料\Demo\”路径下的python-demos目录下。案例脚本文件无需编译,可基于我司提供的系统直接运行。 ## **4.1 Python开发案例** 本章节以简单案例演示Python的使用方法。系统支持Python3.10,相关库位于文件系统"/usr/lib/python3.10/"目录下。 ![](https://developer.qcloudimg.com/http-save/8546319/55ead6739483b8f02c438ed5bddc729b.png) ![](https://developer.qcloudimg.com/http-save/8546319/99dc91cd47b767f5f97603301c9bde4a.png) ## **4.2 led_flash案例** ### 4.2.1 案例功能 本案例通过向单板机用户可编程指示灯LED设备节点反复交替写入1、0数值,实现LED闪烁效果。LED点亮与熄灭时间均为0.5s。 程序流程如下图所示。 ![](https://developer.qcloudimg.com/http-save/8546319/aea2aa67a9ba485eaf73e029cce8ded3.png) LED设备节点为"/sys/class/leds/user-ledX/"目录下的brightness。 ![](https://developer.qcloudimg.com/http-save/8546319/95ff538e04bffb2b79cdb6895563ccc1.png) ### 4.2.2 操作说明 将案例目录下的led_flash.py脚本文件拷贝至单板机文件系统,并在脚本文件所在目录执行如下命令查看程序参数信息。 Target# ./led_flash.py -h ![](https://developer.qcloudimg.com/http-save/8546319/1d2fa2c073d000a1fafe3ab8d87a244b.png) 执行如下命令运行脚本程序,即可看到单板机上的LED进行闪烁。 Target# ./led_flash.py ![](https://developer.qcloudimg.com/http-save/8546319/1da52d103af85f99ae1e45ef9f0184a6.png) 可按下"Ctrl + C"终止程序。 ### 4.2.3 关键代码 (1)查找所有LED设备。 ![](https://developer.qcloudimg.com/http-save/8546319/5729ff93795c2d5aee5446137264f6c5.png) (2)控制LED亮灭。 ![](https://developer.qcloudimg.com/http-save/8546319/a468ed2dfe34b5aecf650c4f89f780c5.png) ## **5 MQTT通信案例** 我司提供的MQTT通信协议开发案例主要包括mqtt_client和mqtt_sinewave_pub,位于产品资料“4-软件资料\Demo\mqtt-demos\”目录下。 ## **5.1 MQTT概述** MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。 MQTT是轻量、简单、开放和易于实现的,同时作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 ![](https://developer.qcloudimg.com/http-save/8546319/34f3319f4a8d6a11ca63edd374f38ae3.png) MQTT具有如下特点: (1)轻量可靠:MQTT的报文格式精简、紧凑,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。 (2)发布/订阅模式(Publish/Subscribe):发布/订阅模式的优点在于发布者与订阅者的解耦,实现异步协议。即订阅者与发布者无需建立直接连接,亦无需同时在线。 (3)为物联网而生:提供心跳机制、遗嘱消息、QoS质量等级 + 离线消息、主题和安全管理等全面的物联网应用特性。 (4)生态更完善:覆盖范围广,已成为众多云厂商物联网平台的标准通信协议。 ## **5.2 应用场景** MQTT作为一种低开销,低带宽占用的即时通讯协议,可以极少的代码和带宽为联网设备提供实时可靠的消息服务,适用于硬件资源有限的设备及带宽有限的网络环境。常见的应用场景如下: (1)物联网M2M通信,物联网大数据采集。 (2)移动即时消息及消息推送。 (3)智能硬件、智能家居、智能电器。 (4)车联网通信,电动车站桩采集。 (5)智慧城市、远程医疗、远程教育。 (6)电力能源、石油能源。 ## **5.3 Mosquitto工具安装** Mosquitto是一款开源的MQTT消息代理(服务器)软件,提供轻量级的、支持可发布/可订阅的的消息推送模式。我司提供的单板机文件系统已支持Mosquitto工具,本文mqtt_client案例采用Mosquitto工具演示MQTT通信协议的通信功能。由于上位机Ubuntu系统作为通信对象,因此需在Ubuntu终端执行如下命令安装Mosquitto工具,出现提示时输入"Y"并按下回车即可。 Host# sudo apt-get install mosquitto-clients ![](https://developer.qcloudimg.com/http-save/8546319/90e1230e31d47e63047b020f5a925ead.png) ## **5.4 mqtt_client案例** ### 5.4.1 案例说明 本案例使用libmosquitto的API与MQTT代理服务器通信。基于MQTT通信协议,实现发布和订阅消息功能。 程序流程图如下图所示。 ![](https://developer.qcloudimg.com/http-save/8546319/916c7bb37cf15e0231311c67ac06d2f4.png) ### 5.4.2 案例测试 本案例使用公网MQTT服务器与上位机Ubuntu Mosquitto工具通信。请通过网线将单板机千兆网口LAN1和上位机连接至公网,确保可正常访问互联网。 下表提供了可用的在线公共MQTT服务器,可根据需要自行切换。 ![](https://developer.qcloudimg.com/http-save/8546319/f2caf480179f018635ffbcf27a4af66f.png) 单板机启动,将案例bin目录下mqtt_client可执行文件拷贝至单板机系统的任意目录下,执行如下命令查看程序参数说明。 Target# ./mqtt_client --help ![](https://developer.qcloudimg.com/http-save/8546319/b62c1f2f293b711ccde301f214696fb1.png) (1)单板机发布/上位机订阅 在上位机执行如下命令,使用mosquitto_sub工具订阅MQTT主题。 Host# mosquitto_sub -h broker-cn.emqx.io -p 1883 -t test/data 参数解析: -h:指定MQTT服务器 -p:指定MQTT服务器端口 -t:定义MQTT主题,可自定义命名 ![](https://developer.qcloudimg.com/http-save/8546319/9d90dcce6bf4b4113678029b4b9331fa.png) 在单板机系统执行如下命令发布消息至MQTT服务器。 Target# ./mqtt_client -h mosquitto_sub -h broker-cn.emqx.io -p 1883 -t test/data -p 1883 -M publish -t test/data -m 'www.tronlong.com' 参数解析: -h:MQTT服务器 -p:MQTT服务器端口 -M:模式,publish为发布,subscribe为订阅 -t:MQTT主题,可自定义命名 -m:发布的MQTT消息 ![](https://developer.qcloudimg.com/http-save/8546319/a4ce0364378b5b3d068b271710eaffc3.png) 消息发布成功后,上位机将从MQTT服务器接收到对应的消息。 ![](https://developer.qcloudimg.com/http-save/8546319/190a329b21077112bc9bfa91f14cfeff.png) (2)单板机订阅/上位机发布 在单板机文件系统执行如下命令订阅MQTT主题。 Target# ./mqtt_client -h broker-cn.emqx.io -p 1883 -M subscribe -t test/data ![](https://developer.qcloudimg.com/http-save/8546319/1a2fc7da3acfc8d32fd3c4cf52afb5d3.png) 在上位机执行如下命令发布消息至MQTT服务器。 Host# mosquitto_pub -h broker-cn.emqx.io -p 1883 -t test/data -m [www.tronlong.com](http://www.tronlong.com/) ![](https://developer.qcloudimg.com/http-save/8546319/bd3bad32849d394789123c08f659a4d9.png) 消息发布成功后,单板机将从MQTT服务器接收到对应消息。 ![](https://developer.qcloudimg.com/http-save/8546319/96e60645f33ea13436ab6b2120ceb9b9.png) 由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注创龙科技,或者评论区留言,感谢您的支持!

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册