了解内存分配机制(共享映射与请求分页)
通过 pmap 命令,可以获取用户进程逻辑地址空间中映射的内存信息:
pmap -x $pid
其中 -x 表示获取详细信息。
下面是一个例子:
pmap -x $(pidof emacs) |head -20
其中,“Address(地址)”指的进程的逻辑地址空间。
"Kbytes"列表示的是对应逻辑地址的容量,以Kb为单位
“RSS”列表示的是实际使用的物理内存容量,由于分页机制的存在,这个值一般要比"Kbytes"的值要少。
"Mapping"列为逻辑内存的映射方式,其中"[annon]"表示通过malloc函数来分配的堆空间(匿名内存),"[stack]"为进程的栈空间,这两种映射都是将物理内存映射到进程的逻辑内存上去。 而"emacs-25.3","libpixbufloader-svg.so"等文件名则表示它们执行的是文件映射,他们对应的是磁盘上的文件。当这些文件被读入高速缓存后,相应的内存空间被映射成进程的逻辑内存。
当出现多个程序共同使用相同的文件映射(共享库)时,它们可以共享磁盘高速缓存中的同一空间,从而节省物理内存的使用量,这种技术就是"共享映射"技术。
来自:http://lujun9972.github.io/blog/2018/04/18/linux%E5%86%85%E5%AD%98%E7%9A%84%E5%88%86%E9%85%8D%E5%92%8C%E9%87%8A%E6%94%BE/
通过 pmap 命令,可以获取用户进程逻辑地址空间中映射的内存信息:
pmap -x $pid
其中 -x 表示获取详细信息。
下面是一个例子:
pmap -x $(pidof emacs) |head -20
其中,“Address(地址)”指的进程的逻辑地址空间。
"Kbytes"列表示的是对应逻辑地址的容量,以Kb为单位
“RSS”列表示的是实际使用的物理内存容量,由于分页机制的存在,这个值一般要比"Kbytes"的值要少。
"Mapping"列为逻辑内存的映射方式,其中"[annon]"表示通过malloc函数来分配的堆空间(匿名内存),"[stack]"为进程的栈空间,这两种映射都是将物理内存映射到进程的逻辑内存上去。 而"emacs-25.3","libpixbufloader-svg.so"等文件名则表示它们执行的是文件映射,他们对应的是磁盘上的文件。当这些文件被读入高速缓存后,相应的内存空间被映射成进程的逻辑内存。
当出现多个程序共同使用相同的文件映射(共享库)时,它们可以共享磁盘高速缓存中的同一空间,从而节省物理内存的使用量,这种技术就是"共享映射"技术。
来自:http://lujun9972.github.io/blog/2018/04/18/linux%E5%86%85%E5%AD%98%E7%9A%84%E5%88%86%E9%85%8D%E5%92%8C%E9%87%8A%E6%94%BE/
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/9739/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表