日志删了,磁盘空间为什么没回来
df 显示磁盘占用很高,du 却找不到大文件,可能是进程仍持有已删除的文件。用一个实测的 8 MiB Linux 小实验说明名字、inode 和文件描述符的关系,再给出 lsof 与 /proc 的核对方法,以及日志重新打开、轮转和空间恢复的验证步骤。
这个话题下有 10 篇手记。
df 显示磁盘占用很高,du 却找不到大文件,可能是进程仍持有已删除的文件。用一个实测的 8 MiB Linux 小实验说明名字、inode 和文件描述符的关系,再给出 lsof 与 /proc 的核对方法,以及日志重新打开、轮转和空间恢复的验证步骤。
一台 2 核 1.7 GB、出口约 4 Mbps 的服务器上跑着六个 Spring Boot 应用。本文记录一次先测量、后动手的全面体检:证书自动续期与每日备份,用 rsync 加可复现构建把发版上传从 50 分钟压到十几秒,把占文章页 85% 的内联脚本逐字节核对后外置,第三方前端库改用固定版本副本,归档页从 260 毫秒降到 40 毫秒,修正软 404 与扫描器噪音,并记录音乐版权误判的真实原因,以及测完内存数据后决定不做的取舍。
“Too many open files”并不意味着磁盘文件太多,也不一定靠调大 ulimit 就能解决。本文从 Linux 文件描述符的作用出发,区分进程软硬限制、系统文件句柄上限与 inotify 配额,通过 /proc、lsof 和受控实验定位资源耗尽原因,解释 systemd 与 Docker 配置为何看似修改却没有生效,并结合 Java 文件流示例展示资源泄漏的修复方法。最后通过容量预算、增长趋势和故障路径回归,建立从报错识别、现场取证到修复验证的完整排障流程。
线上接口出现延迟尖刺时,我们通常先看 CPU、内存和磁盘使用率。但这些指标只能说明资源“用了多少”,无法直接回答业务线程“因为资源不足等待了多久”。Linux PSI 从任务停顿时间出发,量化 CPU、内存和 I/O 竞争对工作负载造成的真实影响。本文将结合 Linux、cgroup v2、Kubernetes、Prometheus 和 Java 服务排障,讲清 PSI 指标的读取方式、关联分析思路、告警策略以及常见资源问题的优化方向。
传统服务器内存长期绑定在CPU插槽和DDR通道上,容易出现部分机器闲置、部分机器容量不足。CXL通过CXL.io、CXL.cache和CXL.mem,将处理器、加速器与外接内存纳入一致性互连,并支持扩展、池化和动态分配。本文解析CXL 4.0的128 GT/s链路、Bundled Port与RAS增强,说明Linux如何将CXL内存映射为DAX或System RAM,并讨论数据库、AI及Java服务采用分层内存时的适用场景、性能边界与上线检查项。
传统内存监控能告诉我们进程占用了多少内存、系统是否出现压力,却很难回答哪些页面正在频繁使用、哪些页面长期闲置。Linux DAMON 通过区域化采样、动态合并与拆分,在可控开销下持续刻画内存访问频率和冷热变化;DAMOS 进一步把观测结果转化为统计、回收、LRU 优先级调整和内存迁移策略。本文从原理、工具对比、实战命令到生产灰度方案,讲清如何用 DAMON 定位无效常驻内存,并降低直接回收、kswapd 抖动和延迟尖峰风险。
本文记录了把四个独立的 Spring Boot 项目(chat、puke、zepp、blog)合并为一个 Maven 多模块工程,只启动一个 total‑app.jar 的实践。原先每个项目占用一个 JVM,导致服务器内存接近 96%;通过在根 pom 统一依赖、在 launcher 中用 SpringApplicationBuilder 依次启动四个 ApplicationContext,并将配置分别放在 chat.yml、puke.yml、zepp.yml、blog.yml 中,消除了 JVM 底座的重复开销,内存降至约 70%。文章重点阐述了类路径冲突、资源目录重名、自动配置串扰和日志全局化等踩坑及对应的统一依赖、资源隔离、spring.autoconfigure.exclude 等解决方案。部署时仅需一次打包并用单条 java 命令启动,端口和 Nginx 配置保持不变,运维更简洁。该方案适合资源受限、访问量不高且对隔离要求不强的场景,虽牺牲了故障隔离,但能显著降低内存压力,为小型服务器提供务实的优化路径。
日志在运行时被硬截断,排查后发现是 Linux OOM Killer 将进程强制 kill,根因是 2 GB 服务器同时运行 3 个未限制堆大小的 Spring Boot 项目、MySQL 8.0 和监控组件,JVM 默认占用近 3 GB,MySQL 参数又消耗数百 MB,且没有 Swap 作为缓冲。通过为每个 JVM 设置‑Xms/‑Xmx(如 512 M、256 M),调小 MySQL 的 innodb_buffer_pool、max_connections、关闭 performance_schema 并添加 2 GB swap,内存使用降至安全范围,进程不再被 OOM Killer 杀死。经验教训是:小内存机器必须限制 JVM、精简 MySQL 配置并配置 swap,长期方案是迁移数据库或升级机器。
本文介绍了在阿里云 CentOS7 上部署 Spring Boot 项目并实现关闭终端后仍保持运行的完整流程:先在 yml 中更改数据库 IP,执行 clean‑package 打包得到 jar;登录云服务器,创建目录并上传 jar;编写 startup.sh 脚本,使用 `nohup java -jar /myworkspace/blog.jar --server.port=8081 &` 启动并将其设为可执行;通过 `chmod -R 777` 授权后运行脚本,使用 `tail -f nohup.out` 检查日志确认启动;提供了 Nginx HTTPS 配置参考;最后给出查询和 kill 进程停止 Spring Boot 的命令。
本文提供Linux常用命令速查,包括查看系统硬件信息(arch、uname、/proc/*、lspci、lsusb),时间管理(date、cal、clock),关机/重启(shutdown、reboot),文件目录操作(cd、ls、tree、mkdir、rm、mv、cp、ln、touch),文件搜索(find、locate、whereis、which),挂载/卸载文件系统(mount、umount、fuser),磁盘空间查询(df、du、rpm、dpkg),用户组管理(useradd、groupadd、passwd、chage),权限与属性设置(chmod、chown、chgrp、chmod +s/g/t、chattr),压缩打包(gzip、bzip2、tar、zip、rar),以及RPM 包的安装、查询、验证、升级和删除等完整示例。