全部版块 我的主页
论坛 数据科学与人工智能 IT基础
45 0
2025-11-19

前几天遇到一个棘手的问题,在OpenStack上的虚拟机中运行的应用程序陷入了一个死循环。由于该应用程序具有非常高的优先级,导致其他程序和内核线程无法获得CPU资源,包括SSH和控制台登录等关键服务也受到影响,最终系统表现为卡顿:

[程序员] rcu_sched检测到CPU或任务上的阻塞

这个问题引发了一个后续的疑问:如何定位导致此类问题的应用程序?后来,我想到一个方法,即检查内存转储文件,通过查找内存中函数的地址来追踪程序堆栈。实施这种方法之前,需要一个十六进制编辑器。在Windows环境下,虽然Notepad++可能是个选择,但对于动辄数GB大小的虚拟机内存文件,Notepad++显然力不从心。因此,我找到了一个适用于Linux环境的编辑器——bvi。

bvi可以从以下链接下载:bvi源码下载链接。手动编译时,需要先安装ncurses-devel依赖包。编译过程非常简单,只需执行以下命令即可完成安装:./configure; make; make install;

我使用的是最新版本的bvi,其字符串搜索功能与vi相同,而十六进制搜索则需使用反斜杠。值得注意的是,如果内存是以小端模式存储的,则在搜索十六进制值时应考虑其顺序。

有关bvi的详细使用说明,可以在这里查看,或者直接在Linux终端输入“man bvi”获取帮助文档。文档是英文的,这再次证明了掌握英语的重要性。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群