当前位置:网站首页 > R语言数据分析 > 正文

hprof文件怎么分析linux(hprof文件怎么分析 mat)



Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作。当然initramfs是可选的,Linux中的内核编译选项默认开启initrd。在下面的示例情况中你可能要考虑用initramfs。

  • 加载模块,比如第三方driver
  • 定制化启动过程 (比如打印welcome message等)
  • 制作一个非常小的rescue shell
  • 任何kernel不能做的,但在用户态可以做的 (比如执行某些命令)

一个initramfs至少要包含一个文件,文件名为/init。内核将这个文件执行起来的进程作为main init进程(pid 1)。当内核挂载initramfs后,文件系统的根分区还没有被mount, 这意味着你不能访问文件系统中的任何文件。如果你需要一个shell,必须把shell打包到initramfs中,如果你需要一个简单的工具,比如ls, 你也必须把它和它依赖的库或者模块打包到initramfs中。总之,initramfas是一个完全独立运行的体系。

另外initramfs打包的时候,要求打包成压缩的cpio档案。cpio档案可以嵌入到内核image中,也可以作为一个独立的文件在启动的过程中被GRUB load。

Linux的initramrd img

在/boot目录下的initrd.img-xxx (Ubuntu)或者initramfs-xxx.img (CentOS) 文件即为Linux用的initramfs文件。我们可以将其解压出来看看其目录结构,如下:

可以看到initramfs和跟分区文件系统的雏形很像,只是它的大小不大,少了很多工具和库。有些内核模块就在其中,比如:/lib/modules/4.4.0-93-generic/kernel/。

qemu中启动"Hello World" initramfs

在前文“在qemu环境中用gdb调试Linux内核”中,已经准备了一个Linux启动环境,但是缺少initramfs。我们可以做一个最简单的Hello World initramfs,来直观地理解initramfs。

Hello World的C程序如下,与普通的Hello World相比,加了一行while(1)。

编译helloworld.c程序

  • -static: On systems that support dynamic linking, this prevents linking with the shared libraries. //不让gcc动态链接shared libraries
  • -m32: Generate code for a 32-bit or 64-bit environment //在前文“在qemu环境中用gdb调试Linux内核”中Linux内核被编译成了32位架构,所以这里在gcc的选项中也编译成32位可执行程序

在64位机器上编译成32位程序,可能会报错如下:

解决方案是安装libc6-dev-i386包。

打包initramfs文件

在qemu中启动编译好的内核,把hwinitramfs指定为initrd,在-append参数中将init指定为helloworld。

系统能成功启动到输出"Hello World",并且在用户态停住。结合前文“在qemu环境中用gdb调试Linux内核”,可以看到qemu虚机中运行的Linux系统已经成功挂载了initramfs, 在console日志中也能看到“Unpacking initramfs...”。

pnetlab frrouting镜像_gdb调试

参考

到此这篇hprof文件怎么分析linux(hprof文件怎么分析 mat)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • oracle官方文档中文版 pdf(oracle11g官方文档中文版)2025-05-26 07:00:08
  • 怎么保存为py文件(pycharm怎么保存为py文件)2025-05-26 07:00:08
  • vbfor循环语句详解(vb for循环)2025-05-26 07:00:08
  • chrony配置ntp服务器(chrony ntpdate)2025-05-26 07:00:08
  • spring的入门程序详细过程(演示spring入门程序)2025-05-26 07:00:08
  • nrm安装失败(nmm安装过程中出现问题)2025-05-26 07:00:08
  • redhat安装教程vmware(red hat如何安装vmware tools)2025-05-26 07:00:08
  • swagger2默认地址(swagger2配置文件)2025-05-26 07:00:08
  • druid连接池配置多少合适(druid连接池配置详解 maxactive)2025-05-26 07:00:08
  • druid是什么意思中文(fluid是什么意思)2025-05-26 07:00:08
  • 全屏图片