作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目前我正在使用 Linux 4.0.6。核心转储激活后,我观察到生成的核心文件被创建为稀疏文件。例如,ls
命令显示我的核心文件大小为 42 MB。但是,du
命令显示它只分配了 26.3 MB。
我对这个观察的问题:
最佳答案
您应该只考虑什么是核心转储文件:对进程内存的单纯顺序写入。在现代操作系统上,内存不是简单的连续字节范围,而是由多个映射在不同地址的段组成。这解释了如果您尝试在映射段之外的地址读取或写入,您会收到段违规信号 (SIGSEGV)。
因此在转储时,系统按升序写入段,然后lseek到每个新段的开头,从而构建一个稀疏文件。
现在回答您的问题:
- Why does Linux kernel create a sparse file for the coredump?
解释就在上面
- How does it work? Does it depend on the filesystem where the coredump is placed?
不是真的,除非底层文件系统不允许稀疏文件。
- Can I configure the system/ kernel to prevent the coredump as a sparse file?
恕我直言,你不能,更多的是你不想。 ls
命令为您提供程序使用的较高内存地址,而 du
命令为您提供程序使用的总内存大小,因为未使用的地址未映射和根本不消耗内存。
关于linux - Linux 内核为什么以及如何为核心转储创建稀疏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499291/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!