Linux memory

目录

linux监控命令各字段含义详解:

Linux 了解内存使用:

proc.txt:

Malloc internal:

程序的虚拟内存

Openssl内存分配


Linux监控命令各字段含义详解:

linux监控命令各字段含义详解_weixin_34277853的博客-优快云博客

voidcn.com/article/p-egpecvnq-yk.html

Linux 了解内存使用:

Linux 了解内存使用_黄规速博客:学如逆水行舟,不进则退-优快云博客

proc.txt

Linux Kernel Documentation / filesystems / proc.txt

Linux中程序详细的内存使用查看_panderan的博客-优快云博客

Malloc internal:

https://sourceware.org/glibc/wiki/MallocInternals

程序的虚拟内存

每个线程维护自己的heap用于malloc。机制的介绍:https://kushal.fedorapeople.org/siddhesh/posts/malloc-per-thread-arenas-in-glibc.html

Heap的大小可以用mallopt改变(M_MMAP_MAX)。

可以用pmap看到

# pmap 1
1:   /usr/lib/systemd/systemd --system --deserialize 18
0000561240af8000   1412K r-x-- systemd
0000561240e58000    140K r---- systemd
0000561240e7b000      4K rw--- systemd
00005612418e9000   1856K rw---   [ anon ]
00007f5534000000    164K rw---   [ anon ]
00007f5534029000  65372K -----   [ anon ]
00007f553c000000    164K rw---   [ anon ]    used heap for thread *
00007f553c029000  65372K -----   [ anon ]    unused heap for thread * (used + unused = 64M)

00007f5540dc7000      4K -----   [ anon ]
00007f5540dc8000   8192K rw---   [ anon ]     stack for thread x
00007f55415c8000      4K -----   [ anon ]
00007f55415c9000   8192K rw---   [ anon ]     stack for thread y
00007f5541dc9000      4K -----   [ anon ]
00007f5541dca000   8192K rw---   [ anon ]
00007f55425ca000     16K r-x-- libuuid.so.1.3.0

pmap就是将/proc/$pid/smaps内容打印出来。

each thread stack size configuration can be found:

# ulimit -a
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256778
 

strace命令可以发现虚拟内存的堆分配:

#strace -f -ff -tt -e trace=all -o ~/systemcall.log <pid> 

-f   Trace child processes as they are created by currently traced processes as a result of the fork(2), vfork(2) and clone(2) system calls.

-ff    If  the  -o  filename  option is in effect, each processes trace is written to filename.pid

#cat systemcall.log

....

mmap(0x7efcbc000000, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7efcb4000000

.....

Dump memory:

dd if=/proc/12987/mem bs=1 skip=$((0x7f521effe000)) count=$((4*1024)) status=none

dd if=/proc/6744/mem bs=1 skip=$((0x01bb7000)) count=$((0x01c3e000-0x01bb7000)) status=none | strings | less

valgrind

valgrind能够查看内存的分配,但无法区分那个线程分配的内存。而且会改变原有的内存分配机制。因此主要是查看实际使用内存的分配和free的情况,无法查看实际虚拟内存的分配情况。当然也可以查看调用栈。

#valgrind --keep-stacktraces=alloc-and-free --trace-children=yes <command & args> 

#valgrind --tool=callgrind --track-origins=yes --separate-threads=yes <command & args>

Openssl内存分配

OpenSSL学习笔记——内存分配 _mm350670610的专栏-优快云博客

### 回答1: Linux内存是指计算机系统中用于存储数据和程序的物理内存。它是操作系统中最重要的资源之一,因为它直接影响系统的性能和稳定性。Linux内存管理器负责管理内存,包括分配和释放内存,以及将数据从磁盘读取到内存中。Linux还提供了一些工具来监视和管理内存使用情况,例如free、top和vmstat等。在Linux中,内存分为物理内存和虚拟内存。物理内存是计算机实际拥有的内存,而虚拟内存是一种技术,它允许操作系统将磁盘空间用作内存扩展。 ### 回答2: Linux是一种开源的操作系统,旨在提供高性能和高度可靠性。在Linux系统中,内存管理是非常重要的一个方面,因为Linux需要管理系统中的所有内存资源,以确保系统的稳定性和性能表现。 Linux内存采用分页机制,将物理内存按页大小划分,在需要访问内存时将虚拟内存地址转换为物理地址来进行内存访问。在Linux内存管理系统中,内核使用了多种技术来管理内存,包括物理内存管理、虚拟内存管理、页缓存和Slab分配器。 其中,物理内存管理是Linux内存管理的核心。Linux内核将所有可用的物理内存划分为多个页帧,每个页帧通常大小为4KB或8KB。内核使用其中的一小部分作为自己的内存,其余的则用于进程的数据和程序存储。 虚拟内存管理是Linux内存管理的重要组成部分,它通过对内存的交换、分页和共享等技术,将进程所需的内存空间从物理内存中分配出来。虚拟内存可以将进程的内存地址空间映射到物理内存上,同时控制进程对内存的访问,避免了进程间的内存冲突。 页缓存是在读取和写入磁盘时使用的一种特殊内存缓存。当Linux内核需要访问磁盘上的数据时,将该数据读取到内存中的页缓存中,并在需要时将数据从缓存中写回磁盘。 Slab分配器是一种内存管理器,用于管理Page Cache(内核用于缓存文件系统I/O操作的内存页面)。它可以通过缓存和重复使用Page Cache中的对象,从而提高系统的性能。 总之,Linux内存管理是 Linux 系统设计的一个相当重要的部分,它可以帮助系统管理并优化计算机的内存资源,提高系统性能和稳定性。同时,处理好 Linux 内存管理问题也可以增强系统的安全性,并使系统适应更多更复杂的工作负载。 ### 回答3: Linux是一款非常流行的操作系统,它采用了一种称为虚拟内存的机制来管理系统内存。虚拟内存是指将硬盘上的空间作为内存使用,在需要时将数据从硬盘上调入内存中,当内存不足时再将数据调出,这种方式可以有效地扩展系统内存,以支持更多的应用程序。 在Linux中,内存分为多个区域,每个区域有不同的作用。主要包括: 1. 内核空间:内核空间是Linux内核使用的区域,主要用于处理系统硬件、文件系统等等。这个区域的内存是非常重要的,因为内核是操作系统的核心。 2. 用户空间:用户空间是程序员使用的区域,主要用于运行用户的程序和应用程序。用户空间的内存容量是非常大的,可以承载几乎任何规模的应用程序。 3. 缓存区:缓存区是用于存放系统缓存的区域,缓存是系统在读取或写入磁盘数据时使用的技术。缓存区的内存容量可以根据系统实际需要来调整。 4. 虚拟内存:虚拟内存是Linux中的一种内存管理机制,它将硬盘上空间作为内存使用,主要用于支持更多的应用程序和数据。 在Linux中,内存管理非常灵活和高效,可以根据系统实际需要动态分配内存区域。同时,Linux支持一些高级内存调整功能,如内存映射、共享内存等等,这些功能可以帮助程序员有效管理系统内存,提高系统性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值