在 Linux 下用 C++ 写程序出现“卡顿”(卡死、响应慢、帧率低、延迟高)是很常见的问题,原因可以从系统、编译器/语言特性、程序逻辑、资源竞争、IO等多个层面来分析。下面按常见原因分类说明,并给出排查思路。
while (true) {
// 没有 sleep,没有退出条件
}
✅ 解决:
usleep / std::this_thread::sleep_for✅ 解决:
vmstat 1
pidstat -w -p <pid>
top
free -h
✅ 工具:
valgrind --tool=memcheck ./app
for (...) {
auto p = new Object();
delete p;
}
✅ 解决:
std::vector / std::arrayfree -h
如果 Swap 被大量使用 → 卡顿严重
✅ 解决:
echo 10 > /proc/sys/vm/swappinessstd::mutex mtx;
void f() {
std::lock_guard lock(mtx);
// 耗时操作
}
✅ 排查:
perf lock
✅ 优化:
cv.wait(lock); // 没有 predicate
✅ 正确写法:
cv.wait(lock, []{ return ready; });
read(fd, buf, size); // 阻塞
✅ 解决:
epollstd::cout << ... << std::endl;
✅ 解决:
spdlogtop
✅ 解决:
nice -n -10 ./app
✅ 工具:
numactl --hardware
perf stat
✅ 解决:
try {
...
} catch (...) { }
✅ 建议:
top
htop
perf top -p <pid>
pidstat -t -p <pid>
strace -p <pid>
perf record -F 99 -p <pid> -g
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > out.svg
如果你愿意,可以告诉我:
我可以直接帮你定位到具体代码问题。