<程序分析与调优>
https://zhuanlan.zhihu.com/p/733963294
valgrind、gdb、strace
1.如何定位解决进程崩溃
core dump:https://www.cnblogs.com/dongxb/p/17054363.html
strace工具
2.如果一个线程持有锁后,线程一直阻塞,有什么办法避免或解决这种现象
3.如何定位解决内存泄露
https://www.cnblogs.com/dongxb/p/17922486.html
4.回调函数得优缺点,用太多回调函数得缺点
5.CPU 使用率过高如何排查?
示例回答:使用 top 或 htop 查看进程 CPU 使用率,结合 pidstat 分析具体进程的 CPU 占用情况,进一步通过 perf 或 strace 定位高 CPU 占用的代码段或系统调用。
6.如何分析磁盘 I/O 瓶颈?
示例回答:使用 iostat 查看磁盘 I/O 统计信息,通过 iotop 定位高 I/O 占用的进程,结合 lsof 检查进程打开的文件及 I/O 操作。
7.内存不足(OOM)问题如何解决?
示例回答:使用 free -h 查看内存使用情况,通过 dmesg 或 /var/log/messages 检查 OOM Killer 日志,分析被杀进程的内存占用情况,优化程序内存使用或增加系统内存。
8.内核panic导致系统重启
进程在以下情况下可能造成内核panic:
-
解引用空指针:进程在内核态运行时,如果尝试访问指向NULL的内存地址,会导致内核panic。这种情况常见于驱动模块或内核线程中未对指针进行有效性检查。
-
访问非法地址:进程可能因访问未映射的物理内存或越界访问内存区域,触发内核panic。例如,用户态程序误将非法指针传递给内核,或者内核代码中存在数组越界等错误。
-
栈溢出:当进程在内核态的栈空间被递归调用或过大的局部变量撑爆时,会发生栈溢出,导致内核panic。内核栈通常较小(4K~16K),容易因递归过深或局部变量过大而溢出。
-
死锁或竞争条件:进程在内核态因资源竞争导致死锁,或同一资源被多个任务争用而阻塞系统,可能触发内核panic。例如,自旋锁的嵌套使用不当或任务长时间无响应,可能引发看门狗超时重启。
-
非法指令或未定义操作:进程在内核态执行非法指令或未定义的操作,如除零错误、无效的硬件操作等,会导致内核panic。这类错误通常由内核代码中的逻辑错误或硬件故障引起。
-
驱动程序问题:进程与硬件交互时,驱动程序可能存在漏洞或与硬件设备不兼容,导致内核panic。例如,驱动模块在中断处理程序中访问空指针,迫使系统崩溃。
-
内存错误:进程在内核态运行时,内存错误(如地址无效、内存泄漏、内存损坏)可能导致内核panic。这些错误可能由软件设计缺陷、驱动程序错误或硬件故障引起。
-
内核模块不稳定:加载到内核空间的驱动模块或内核组件如果存在不稳定因素,可能导致内核panic。例如,模块在初始化时失败或运行时出现不可恢复的错误。
-
OOM(内存不足):当系统内存耗尽时,OOM Killer可能终止关键进程。如果OOM Killer无法有效释放内存,可能导致内核panic。
-
硬件故障:进程在内核态运行时,硬件故障(如CPU过热、内存错误、硬盘损坏)可能导致内核panic。例如,内存中的某个bit因射线或电磁辐射翻转,导致非法内存访问。
程序运行中,线程死锁住,怎么定位哪个地方死锁了?
浙公网安备 33010602011771号