<程序分析与调优>

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:

  1. 解引用空指针:进程在内核态运行时,如果尝试访问指向NULL的内存地址,会导致内核panic。这种情况常见于驱动模块或内核线程中未对指针进行有效性检查。

  2. 访问非法地址:进程可能因访问未映射的物理内存或越界访问内存区域,触发内核panic。例如,用户态程序误将非法指针传递给内核,或者内核代码中存在数组越界等错误。

  3. 栈溢出:当进程在内核态的栈空间被递归调用或过大的局部变量撑爆时,会发生栈溢出,导致内核panic。内核栈通常较小(4K~16K),容易因递归过深或局部变量过大而溢出。

  4. 死锁或竞争条件:进程在内核态因资源竞争导致死锁,或同一资源被多个任务争用而阻塞系统,可能触发内核panic。例如,自旋锁的嵌套使用不当或任务长时间无响应,可能引发看门狗超时重启。

  5. 非法指令或未定义操作:进程在内核态执行非法指令或未定义的操作,如除零错误、无效的硬件操作等,会导致内核panic。这类错误通常由内核代码中的逻辑错误或硬件故障引起。

  6. 驱动程序问题:进程与硬件交互时,驱动程序可能存在漏洞或与硬件设备不兼容,导致内核panic。例如,驱动模块在中断处理程序中访问空指针,迫使系统崩溃。

  7. 内存错误:进程在内核态运行时,内存错误(如地址无效、内存泄漏、内存损坏)可能导致内核panic。这些错误可能由软件设计缺陷、驱动程序错误或硬件故障引起。

  8. 内核模块不稳定:加载到内核空间的驱动模块或内核组件如果存在不稳定因素,可能导致内核panic。例如,模块在初始化时失败或运行时出现不可恢复的错误。

  9. OOM(内存不足):当系统内存耗尽时,OOM Killer可能终止关键进程。如果OOM Killer无法有效释放内存,可能导致内核panic。

  10. 硬件故障:进程在内核态运行时,硬件故障(如CPU过热、内存错误、硬盘损坏)可能导致内核panic。例如,内存中的某个bit因射线或电磁辐射翻转,导致非法内存访问。

 

 

程序运行中,线程死锁住,怎么定位哪个地方死锁了?

 

posted @ 2025-06-25 09:59  一个不知道干嘛的小萌新  阅读(26)  评论(0)    收藏  举报