linux 内存分布,linux如何查看内存大小
大家好,关于linux 内存分布很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于linux如何查看内存大小的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
Linux进程虚拟地址空间的分布,以及堆和栈的区别
一、具体分布如图所示:
二、关于堆和栈
(1)分配方式:
栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆:一般由程序员分配释放,它的分配方式类似于链表。
(2)申请后系统的响应:
栈:只要所申请的空间小于栈的剩余空间,则系统为程序分配内存,否则栈溢出。
堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,遍历该链表,找出第一个大于所申请空间的节点,然后将其从链表中删除并分配,如果没用完,则系统会把多余的重新放回到链表中。
(3)申请大小的限制:
栈:栈是高地址向低地址扩展的连续内存,栈的大小一般是2M;
堆:堆是低地址向高地址扩展的不连续内存,堆的大小与计算机有效的虚拟内存有关系。
(4)申请效率:
栈:由系统自动分配,速度较快;
堆:速度慢,容易产生内存碎片;
关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html.
超详细|Linux 如何进行内存分配
Linux操作系统中的虚拟内存管理分为内核空间和用户空间两大部分。在32位和64位系统中,地址空间范围不同,每个进程拥有独立的虚拟内存,内核地址关联相同物理内存,便于进程切换至内核态访问。用户空间内存分布,以32位系统为例,从低到高分为6种不同的内存段。
申请内存空间通常有两种方式:malloc和mmap。使用malloc时,系统可能调用brk或mmap函数。当分配小型内存(小于或等于128kb),malloc会通过brk函数移动堆顶指针获取新空间;分配大型内存(大于128kb)时,mmap通过私有匿名映射在文件映射区分配内存。
malloc分配的是虚拟内存,未被访问的虚拟内存不会映射到物理内存,不占用物理内存资源。访问已分配虚拟地址空间时,操作系统通过查找页表建立虚拟内存与物理内存映射关系。缺页中断发生在虚拟内存不在主存时,系统将文件映射为分页交换文件。
分配内存后使用free释放内存,malloc通过brk系统调用在堆空间预分配内存,内存释放缓存在内存池,下次申请时直接取用,减少了系统调用和缺页中断次数,降低CPU消耗。相反,使用mmap分配内存每次释放时归还给操作系统,频繁使用mmap分配内存会导致CPU消耗较大,且增加运行态切换和缺页中断次数。
通过brk分配内存时,连续申请并释放大块内存后,堆内可能产生不可用的碎片,导致内存泄露。随着频繁的malloc和free操作,尤其是对小块内存的使用,系统内将累积越来越多不可用的碎片,引发“内存泄露”问题,这种现象在使用valgrind时无法检测。因此,malloc默认分配大块内存(128KB)时使用mmap分配空间,以优化内存管理。
linux系统分析之工具大全(观测,性能分析等)
工欲善其事必先利其器,要想分析清楚linux服务器中的各类问题,比如性能问题,服务程序的bug,那么必须对该系统下的分析工具有一定的了解。以下是当前主流的cpu,内存,网络,IO以及各种debug分析工具的简单总结:
1.性能分析工具:
- top:最常规的大盘工具了,展示进程以及系统全局的cpu,内存等信息。
- atop:atop除了有非常全的大盘信息,还能实时展示进程cpu,磁盘io信息,同时会实时监视频率期间,退出进程的退出原因。它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。
- dstat:默认输出的是相关资源的总和,通过设置相关参数,可以只看某个cpu,某个网卡或者某个磁盘的数据。
- sar:System Activity Reporter系统活动情况报告,是目前 Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU效率、内存使用状况、进程活动及 IPC有关的活动等。要判断系统瓶颈问题,有时需几个 sar命令选项结合起来;可用 sar-u和 sar-q等来查看 CPU使用情况;可用sar-B、sar-r和 sar-W等来查看磁盘 I/O情况;可用 sar-b、sar-u和 sar-d等来查看网络流量;看到的是整个系统的情况,比如像进程的缺页中断等情况可以通过 pidstat查看;sar找出系统瓶颈的利器。
- vmstat:Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。
- pidstat:主要用于监控全部或指定进程占用系统资源的情况(甚至可以查看子进程),可监控如下状态:进程(或子进程)内存情况、进程(或子进程)磁盘情况、进程(或子进程)堆栈使用情况、进程(或子进程)cpu使用情况、进程(或子进程)上下文切换使用情况。
2.线程相关工具:
- mpstat:实时系统监控工具,可查看所有CPU的平均状况信息,且能查看特定CPU的信息。最大的特点是:可以查看多核心cpu中每个计算核心的统计数据。
- perf:很重要的一点是还能输出进程占用耗时的调用栈。
- ftrace:用于内核性能追踪。
3.内存相关工具:
- freeslabtoppmap:通过该命令,可以看到一个进程的内存分布情况。
4. IO相关工具:
- iotop:统计每个进程的IO信息。
- blktrace:用于跟踪磁盘IO,得到数据后,通过excel工具就可以画图。
- perf:分析IO使用情况,可以输出进程占用耗时的调用栈。
5.网络相关工具:
- iftop:查看每个网络连通的主机的网络流量信息。
- nethogs:实时统计网络带宽利用率。
- ifstat:可以观察各个网卡流量的输入以及输出情况。
6.处理目标文件的工具:
- ldd:查看程式运行所需的共享库。
- nm:列出一个目标文件的符号表种定义的符号。
- size:列出目标文件种节的名字和大小。
- readleaf:显示一个目标文件的完整结构。
- objdump:所有二进制工具之母,能够显示一个目标文件中的所有信息。
7.硬件相关工具:
- lscpu/lspci/lsscsi:用于查看CPU、PCI设备、SCSI设备等信息。
8.其他:
- sysrq:Linux内核调试方法总结。
- lsof:查看当前系统文件的工具。
- pstack:展示进程调用栈。
- swapon/swapoff:用于开启或关闭swap分区。
以上工具涵盖了linux系统分析的各个方面,能够帮助用户快速定位问题并进行优化。