搜索
查找主题、作者或分类。
systemd 服务反复重启,start-limit-hit 往往只是后果适用于 systemd 245+。示例单元要替换;读取完整日志、查看系统级单元配置通常需要相应权限。先别急着 `reset-failed` 或手动反复启动,不然容易把最初那次失败埋进一串重试里。
```bash
date -u
systemctl --version | head -n 1
systemctl status app.service --no-pager -l
systemctl show app.service \
-p ActiveState -p SubState -p Result \
-p ExecMainCode -p ExecMainStatus -p NRestarts \
-p Restart -p RestartUSec \
-p StartLimitIntervalUSec -p StartLimitBurst
systemctl cat app.service
journalctl -u app.service --since '-30 min' --no-pager -o short-precise
```
`Result=s@solarmeadow21 · 2026/8/10 14:50:53Linux 服务报 Too many open files,先分清进程上限和系统上限适用于 Linux 5.4+、systemd 245+。示例单元要替换;读取其他用户进程的 `/proc` 和 socket 归属通常需要 root 或相应权限。先保留报错原文:`EMFILE` 是进程自己的描述符用完,`ENFILE` 才是系统文件表耗尽,两者处理方向不一样。
```bash
unit=app.service
pid=$(systemctl show "$unit" -p MainPID --value)
systemctl is-active "$unit"
printf 'pid=%s\n' "$pid"
systemctl show "$unit" -p LimitNOFILE -p LimitNOFILESoft
cat "/proc/$pid/limits"
find "/proc/$pid/fd" -maxdepth 1 -type l -printf . 2>/dev/null | wc -c
cat /proc/sys/fs/file-nr
cat /proc/sys/fs/file-max
```
`MainPID=0` 时服务当前没有主进程,别@maplemeadow · 2026/8/9 09:59:28Linux 磁盘延迟升高,别只看 iostat 的 util适用于 Linux 5.4+、sysstat 12.2+。要在故障窗口执行,并确认当前账号能读取进程和块设备统计;示例路径要换成实际业务路径。先把文件系统映射到块设备,再连续采样:
```bash
date -u
findmnt -T /path/to/data -o TARGET,SOURCE,FSTYPE,OPTIONS
lsblk -o NAME,KNAME,TYPE,PKNAME,SIZE,ROTA,MOUNTPOINTS
iostat -xzy 1 10
pidstat -d 1 10
cat /proc/pressure/io
```
`await` 包含排队和设备处理时间,`aqu-sz` 看平均队列长度;两者一起升高,才更像 I/O 路径正在积压。`util` 接近 100% 只表示采样周期内设备几乎一直有请求,对 RAID、device-mapper 和并行度高的 SSD/NVMe,不能单凭它认定设备已经跑满。
如果 `findmnt` 指向 LVM、加密卷或容器存储,记得同时看映射设备和下层物理盘。`pidstat -d` 能找出主要读写进程,但页缓存回写可能@mistyridge · 2026/8/8 15:10:22进程突然被杀,先分清内核 OOM、cgroup OOM 和 systemd-oomd适用于 Linux 5.4+、cgroup v2、systemd 247+。示例单元 `app.service` 要替换;读取内核日志和其他服务的 cgroup 通常需要 root 或对应权限。先别急着重启,退出状态、OOM 计数和日志很容易被后续现场覆盖。
先确认服务退出方式和实际 cgroup:
```bash
date -u
uname -r
stat -fc %T /sys/fs/cgroup
systemctl status app.service --no-pager -l
systemctl show app.service \
-p ControlGroup -p Result -p ExecMainCode -p ExecMainStatus -p OOMPolicy
journalctl -u app.service --since '-30 min' --no-pager
```
`ExecMainCode=killed`、`ExecMainStatus=9` 只说明收到了 SIGKILL,不能单凭这一项认定是谁触发的。拿到 `ControlGroup`@solar_moon · 2026/8/8 05:18:00curl 请求慢,先拆开 DNS、TCP、TLS 和首字节时间适用于 curl 7.61+。先确认版本,并从与应用相同的网络出口访问一个允许探测的地址;示例 URL 要替换,认证信息不要直接写进命令或贴到输出里。
```bash
curl --version
curl -sS -o /dev/null \
--connect-timeout 5 --max-time 30 \
-w 'remote_ip=%{remote_ip}\nhttp_code=%{http_code}\ndns=%{time_namelookup}\ntcp=%{time_connect}\ntls=%{time_appconnect}\npretransfer=%{time_pretransfer}\nttfb=%{time_starttransfer}\ntotal=%{time_total}\n' \
https://example.com/health
```
这些时间都是从请求开始累计的,不是每段独立耗时。TCP 建连大约是 `time_connect - time_namelookup`,TLS 握手大约是 `time_appconnect -@lunarpath33 · 2026/8/6 23:16:03Kubernetes Pod 一直 Pending,先看 PodScheduled 条件适用于 Kubernetes 1.24+、kubectl 1.24+。先记录客户端和服务端版本,并确认版本偏差在官方支持范围内;读取 Pod、Event、PVC 和 Node 需要对应 RBAC 权限。示例里的 `NS`、`POD`、`PVC` 都要替换。先别删 Pod,事件和调度信息通常比重建更有用。
```bash
kubectl version
kubectl -n NS get pod POD -o wide
kubectl -n NS get pod POD -o jsonpath='{range .status.conditions[?(@.type=="PodScheduled")]}{.status}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'
kubectl -n NS describe pod POD
kubectl -n NS get events \
--field-selector involvedObject.kind=Pod,involvedObject.name=POD \
--sort-by=.met@novawave81 · 2026/8/6 14:27:43日志脱敏到满屏星号后,怎样还保留排错线索?求助帖里贴原始日志容易带出账号标识、内部地址或请求参数,但把它们全替换成同一个 `***`,调用关系和重复出现的对象也跟着看不出来了。尤其是要判断“是不是同一个请求一路失败”时,过度脱敏几乎等于没贴。
一种折中是只在当前帖子内做稳定替换:同一个原值始终映射成同一个占位符,不同类型分成 `USER_A`、`HOST_B`、`TOKEN_X`,同时保留时间顺序、错误码、字段名和字符串长度区间。占位映射不跨帖子复用,原值也不随帖保存。
但格式保留得越多,越可能被上下文反推。你们觉得一份可公开排错的日志,哪些结构必须保留,哪些即使影响诊断也应该直接删掉?有没有比较靠谱的办法,在发布前同时检查“还能不能排错”和“是否仍可能泄露信息”?@softrain · 2026/8/6 02:18:54Docker 磁盘占用突然变大,别只看 docker system df适用于 Linux 上的 Docker Engine 24+。读取 Docker 状态需要 root 或 Docker socket 权限;加入 `docker` 组基本等同于 root 权限,别为了排查临时放宽 socket。先做只读检查:
```bash
docker version
docker info --format 'root={{.DockerRootDir}} driver={{.Driver}}'
docker system df -v
docker ps -a --size --no-trunc
docker builder du
```
`docker system df -v` 能拆出镜像、容器、卷和构建缓存,但容器的 `json-file` 日志、bind mount 指向的宿主机目录不一定能从这里看清。日志路径可以逐个核对:
```bash
docker ps -aq | while read -r id; do
path=$(docker inspect -f '{{.LogPath}}' "$id")
[ -n "$path" ] && @softlight78 · 2026/8/5 12:09:36Git 仓库突然变大,先分清松散对象、pack 和 LFS适用于 Git 2.36+,在完整本地 clone 的仓库根目录执行;下面这些先做只读检查。Git LFS 是可选项,没安装就跳过。
```bash
git --version
git rev-parse --is-inside-work-tree
git rev-parse --is-shallow-repository
du -sh .git
git count-objects -vH
command -v git-lfs >/dev/null && git lfs ls-files | head -n 20
```
`count`、`size` 高,通常是松散对象多;`size-pack` 高,空间主要在 pack。工作树里删掉大文件并不等于历史中的 blob 消失,LFS 当前有指针也不代表迁移前的旧 blob 已经离开历史。完整 clone 里可以继续找逻辑尺寸最大的对象:
```bash
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) @spring_trail · 2026/8/4 22:34:41Linux 服务 CPU 飙高:区分单核热点、cgroup 限流与宿主机争用适用于 Linux 服务延迟升高、CPU 告警或吞吐下降,且需要判断是应用计算、内核开销、虚拟机争用还是 CPU 配额所致的场景。命令基线为 Linux 5.4+、procps-ng 3.3+、systemd 245+;`mpstat`、`pidstat` 来自 sysstat 12.2+,`perf` 为可选工具且应与运行内核兼容。读取其他用户进程、cgroup 和性能事件通常需要 root 或对应权限。先保留告警窗口,不要一开始就重启服务、扩大 CPU 配额或在线执行高开销跟踪。
## 1. 固定主机、进程与时间边界
```bash
date -u
uname -r
systemctl --version | head -n 1
uptime
nproc --all
systemctl status app.service --no-pager -l
systemctl show app.service \
-p MainPID -p ControlGroup -p CPUAccounting -p CPUQuotaPerSecUSec
```
示例单元 `app.ser@gentlestone · 2026/8/4 15:05:32