如何查看Linux内存中的程序所有堆的地址
ps -aux | sort -k4nr | head -N1
*命令详解:
1. head:-N可以指定显示的行数,默认显示10行。
2. ps:参数a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分。ps -aux的输出格式如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]12345
3. sort -k4nr中(k代表从根据哪一个关键词排序,后面的数字4表示按照第四列排序;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。-k3表示按照cpu占用率排序。
方法一:ps命令可以显示各个进程的内存使用情况、以及更详细的物理内存使用情况和虚拟内存使用情况。你可以使用“–sort”选项对进程进行排序,例如按RSS进行排序:
用法示例:$ ps aux --sort -rss
方法二:top命令显示了每个进程的内存动态使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。
用法示例:$ top
方法三:查看虚拟文件/proc/meminfo可以查看内存的总体使用情况。这个动态更新的虚拟文件实际上是许多其它内存相关工具(如:free/ps/top)等的组合显示。但并不包含某一具体进程的内存使用情况。
用法示例:$ cat /proc/meminfo
单个进程的内存查看 cat /proc/[pid] 下面有几个文件: maps , smaps, status
maps 文件可以查看某个进程的代码段、栈区、堆区、动态库、内核区对应的虚拟地址,如果你还不了解linux进程的内存空间,可以参考这里。
下图是maps文件内存示例
Develop>cat /proc/self/maps
00400000-0040b000 r-xp 00000000 fd:00 48 /mnt/cf/orig/root/bin/cat
0060a000-0060b000 r--p 0000a000 fd:00 48 /mnt/cf/orig/root/bin/cat
0060b000-0060c000 rw-p 0000b000 fd:00 48 /mnt/cf/orig/root/bin/cat 代码段
0060c000-0062d000 rw-p 00000000 00:00 0 [heap] 堆区
7f1fff43b000-7f1fff5d4000 r-xp 00000000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff5d4000-7f1fff7d3000 ---p 00199000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d3000-7f1fff7d7000 r--p 00198000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d7000-7f1fff7d9000 rw-p 0019c000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d9000-7f1fff7dd000 rw-p 00000000 00:00 0
7f1fff7dd000-7f1fff7fe000 r-xp 00000000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9f9000-7f1fff9fd000 rw-p 00000000 00:00 0
7f1fff9fd000-7f1fff9fe000 r--p 00020000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9fe000-7f1fff9ff000 rw-p 00021000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9ff000-7f1fffa00000 rw-p 00000000 00:00 0
7fff443de000-7fff443ff000 rw-p 00000000 00:00 0 [stack] 用户态栈区
7fff443ff000-7fff44400000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 内核区
有时候可以通过不断查看某个进程的maps文件,通过查看其虚拟内存(堆区)是否不停增长来简单判断进程是否发生了内存溢出。
maps文件只能显示简单的分区,smap文件可以显示每个分区的更详细的内存占用数据
下图是smaps文件内存示例, 实际显示内容会将每一个区都显示出来,下面我只拷贝了代码段和堆区,
每一个区显示的内容项目是一样的,smaps文件各项含义可以参考这里
Develop>cat /proc/self/smaps
00400000-0040b000 r-xp 00000000 fd:00 48 /mnt/cf/orig/root/bin/cat
Size: 44 kB 虚拟内存大小
Rss: 28 kB 实际使用物理内存大小
Pss: 28 kB
Shared_Clean: 0 kB 页面被改,则是dirty,否则是clean,页面引用计数>1,是shared,否则是private
Shared_Dirty: 0 kB
Private_Clean: 28 kB
Private_Dirty: 0 kB
Referenced: 28 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB 处于交换区的页面大小
KernelPageSize: 4 kB 操作系统一个页面大小
MMUPageSize: 4 kB 体系结构MMU一个页面大小
Locked: 0 kB
0060c000-0062d000 rw-p 00000000 00:00 0 [heap]
Size: 132 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
下图是status文件内存示例, 加粗部分是内存相关的统计,
Develop>cat /proc/24475/status
Name: netio 可执行程序的名字
State: R (running) 任务状态,运行/睡眠/僵死
Tgid: 24475 线程组号
Pid: 24475 进程id
PPid: 19635 父进程id
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256 该进程最大文件描述符个数
Groups: 0
VmPeak: 6330708 kB 内存使用峰值
VmSize: 268876 kB 进程虚拟地址空间大小
VmLck: 0 kB 进程锁住的物理内存大小,锁住的物理内存无法交换到硬盘
VmHWM: 16656 kB
VmRSS: 11420 kB 进程正在使用的物理内存大小
VmData: 230844 kB 进程数据段大小
VmStk: 136 kB 进程用户态栈大小
VmExe: 760 kB 进程代码段大小
VmLib: 7772 kB 进程使用的库映射到虚拟内存空间的大小
VmPTE: 120 kB 进程页表大小
VmSwap: 0 kB
Threads: 5
SigQ: 0/63346
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: 01
Cpus_allowed_list: 0
Mems_allowed: 01
Mems_allowed_list: 0
voluntary_ctxt_switches: 201
nonvoluntary_ctxt_switches: 909
可以看到,linux下内存占用是一个比较复杂的概念,不能
简单通过一个单一指标就判断某个程序“内存消耗”大小,原因有下面2点:
进程所申请的内存不一定真正会被用到(malloc或mmap的实现)
真正用到了的内存也不一定是只有该进程自己在用 (比如动态共享库)
关于内存的使用分析及本文几个命令的说明也可以参考这里
下面是查看整机内存使用情况的文件 /proc/meminfo
Develop>cat /proc/meminfo
MemTotal: 8112280 kB 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)
MemFree: 4188636 kB LowFree与HighFree的总和,被系统留着未使用的内存
Buffers: 34728 kB 用来给文件做缓冲大小
Cached: 289740 kB 被高速缓冲存储器(cache memory)用的内存的大小
(等于 diskcache minus SwapCache )
SwapCached: 0 kB 被高速缓冲存储器(cache memory)用的交换空间的大小
已经被交换出来的内存,但仍然被存放在swapfile中。
用来在需要的时候很快的被替换而不需要再次打开I/O端口
Active: 435240 kB 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,
除非非常必要否则不会被移作他用
Inactive: 231512 kB 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
Active(anon): 361252 kB
Inactive(anon): 120688 kB
Active(file): 73988 kB
Inactive(file): 110824 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB 交换空间的总大小
SwapFree: 0 kB 未被使用交换空间的大小
Dirty: 0 kB 等待被写回到磁盘的内存大小
Writeback: 0 kB 正在被写回到磁盘的内存大小
AnonPages: 348408 kB 未映射页的内存大小
Mapped: 33600 kB 已经被设备和文件等映射的大小
Shmem: 133536 kB
Slab: 55984 kB 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗
SReclaimable: 25028 kB 可收回Slab的大小
SUnreclaim: 30956 kB 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack: 1896 kB 内核栈区大小
PageTables: 8156 kB 管理内存分页页面的索引表的大小
NFS_Unstable: 0 kB 不稳定页表的大小
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2483276 kB
Committed_AS: 1804104 kB
VmallocTotal: 34359738367 kB 可以vmalloc虚拟内存大小
VmallocUsed: 565680 kB 已经被使用的虚拟内存大小
VmallocChunk: 34359162876 kB
HardwareCorrupted: 0 kB
HugePages_Total: 1536 大页面数目
HugePages_Free: 0 空闲大页面数目
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB 大页面一页大小
DirectMap4k: 10240 kB
DirectMap2M: 8302592 kB
查看linux是什么系统
一般来讲,一个Linux发行套件包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),XWindow,桌面环境(比如GNOME和KDE),办公套件(比如OpenOffice.org),等等。Linux内核最初是为英特尔386微处理器设计的。现在Linux内核支持从个人电脑到大型主机甚至包括嵌入式系统在内的各种硬件设备。在开始...
linux如何查看系统版本
release -a" 命令,这将展示包括内核在内的所有版本详细数据。另外,查看"\/etc\/issue" 文件也是一个选项,只需在"cat"后留空格,即可查看到系统的发行版和版本号。这两种获取版本信息的方法同样直观易懂,如图所示。通过这些命令,无论是内核版本还是系统版本,你都能轻松获取到Linux系统的完整信息。
linux查看文件内容的命令()
Linux查看文件内容的命令: `cat`、`less`、`more` 和 `head`、`tail`等命令。以下是 cat命令 `cat` 是“concatenate”的缩写,常用于显示整个文件的内容。例如,要查看名为“example.txt”的文件内容,可以使用命令 `cat example.txt`。此命令会将文件内容直接输出到终端。les...
linux查看文件内容命令
常用的7个Linux文件内容查看命令:1.cat由第一行开始显示文件内容 用法:cat-A 相当于-vET的整合选项,可列出一些特殊字符而不是空白;cat-b 列出行号,仅针对非空白行做行号显示,空白行不标行号;cat-E 将结尾的断行字节$显示出来;cat-n 列印出行号,连同空白行也会有行号,与-b的选项不同;cat-...
怎么知道Linux内核版本
一、查看Linux内核版本命令 方法一:cat\/proc\/version 用法:[root@S-CentOS home]# cat \/proc\/version 方法二:uname-a 用法:[root@S-CentOS home]# uname-a 二、查看Linux系统版本的命令 方法一:lsb_release -a 用法:[root@S-CentOS ~]# lsb_release -a 注意:使用该命令即可列出所有版本...
linux下怎么查看root目录下的文件内容?
1、首先打开Terminal终端:依次定位applications-system tools-Terminal,即进入命令行模式。2、进入root目录下,先查看是否是root目录,用pwd命令查看当前路径。3、发现确实是root目录下,我们切换到\/home目录下,切换命令:cd \/home,再次用pwd命令查出在\/home目录下。4、在此目录下新建目录文件夹root,命令...
如何查看已安装的Linux内核
Debian\/Ubuntu\/Linux Mint 要查看基于 DEB 系统的 Linux 内核列表,如:Debian、Ubuntu、Linux Mint、Elementary OS 等,可以使用如下命令:dpkg --list | grep linux-image SUSE\/openSUSE 在 SUSE 或 openSUSE 系统中,可以使用如下命令查看 Linux 系统内核:rpm -qa | grep -i kernel Arch Linux Ar...
查看linux的cpu和内存
要查看内存使用情况,可以使用free命令。Free命令会显示系统中的总内存量、已用内存量和可用内存量。用户可以使用free命令来了解系统当前的内存使用情况,并采取措施来优化内存管理。除了这些基本命令之外,还有许多其他的工具可以帮助用户更好地了解Linux系统的性能。例如,vmstat命令可以提供有关虚拟内存和进程...
linux 怎么查看内存使用情况
\/proc\/meminfo 查看RAM使用情况最简单的方法是通过\/proc\/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free \/ ps \/ top)等的组合显示。\/proc\/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过\/proc\/<pid>\/statm 和 \/proc\/<pid>\/status 来查看。cat \/...
linux查看文件内容命令vimlinux查看文件内容命令
linux下查看文件类型的三种方法?1、首先我们以管理员身份(root)登录系统,在系统界面窗口处,输入命令mount,可以看到\/dev\/sda1on\/typeext3表示sda1的文件系统是ext3的类型。2、第二种方式,我们输入命令df-lhT命令,可以在返回的结果内查看到,\/dev\/sda1ext3表示文件类型为ext3类型。3、第三种方式...
后吕阿伐: 首先我们需要打开终端,本经验以Fedora操作系统为例,其他的操作系统可能略有不同.打开终端之后我们输入ps,它就是我们今天的主角,ps是linux操作系统中最基本同时也是非常强大的进程查看命令,如果你对此命令不是十分了解,我们...
布拖县13425359556: 如何查看linux内存中的内容 - ?
后吕阿伐: top能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. 下面是对内存查看free命令输出内容的解释: total:总计物理内存的大小. used:已使用多大. free:可用有多少. Shared:多个进程共享的内存总额. Buffers/cached:磁盘缓存的大小.
布拖县13425359556: 怎么查看在linux系统中安装了哪些程序 - ?
后吕阿伐: 使用命令:rpm -aq查看所有软件;查看指定名字的软件:rpm -aq|grep 软件名;可以使用:rpm --help查看详细参数
布拖县13425359556: 如何在Linux中查看所有正在运行的进程 - ?
后吕阿伐: 它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可以使用top命令.ps命令输入下面的ps命令,显示所有运...
布拖县13425359556: 怎么看linux下正在运行的所有的程序 - ?
后吕阿伐: 用ps -ef命令可查看所有当前正在运行的进程
布拖县13425359556: 如何查看Linux内存中的程序所有堆的地址 - ?
后吕阿伐: 程序使用malloc分配的堆内存地址,记录在那[sic]里? 在内存里. 我是否能够通过一些方法查看具体的地址? 能. 这些记录是一个什么样的形式存在? glibc 的实现应该是链表. 你要知道,malloc(3) 是库函数而不是系统调用——也就是说,它...
布拖县13425359556: 如何查看linux中安装了哪些程序? - ?
后吕阿伐: 你用的是什么Linux系统? Ubuntu和Fedora都可以查看的.先说出来你的发行版是什么rpm管理软件包 很简单rpm -qpl:rpm软件包中包含的文件列表rpm -i:安装指定的软件包到当前linux系统rpm -ivh:安装指定的软件包时显示详细的安装信息...
布拖县13425359556: Linux操作系统中如何查看当前内存中的驱动程序?
后吕阿伐: lsmod显示当前加载驱动及模块大小及使用者 cat /proc/modules 显示模块大小及地址cat /proc/devices 显示当前内存中设备的编号
布拖县13425359556: linux如何查看内存被哪些进程占用 - ?
后吕阿伐: 输入top -d 2这条命令,top命令用于动态显示各个进程的资知源占用情况,top命令常用的-d选项表示top命令的界面更新的秒数(默认是5秒更新一次),将道-d选项设置成2则表示2秒更新一次. top命令显示的下半部分就是是每个进程的资源使用情况,top命令默认是以CPU使用率排序的,这时在top界面上内按下按键M,就可以让top显示的进程信息以内存的占用率进行排序,这样就能够知道内存都被哪些进程占用了.注容:按键Q用于退出top命令界面.
布拖县13425359556: linux中怎么查看程序占用内存大小 - ?
后吕阿伐: 你好,方法如下: 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源...