linux下使用pmap和ldd查看进程调用了什么lib

linux下使用pmap和ldd查看进程调用了什么lib,第1张

pmap PID #查看静态内存使用情况

top #按shift+m 按照内存使用情况进行排序

ps -ef | grep nginx #查看PID 比1234

cat /proc/1234/status #查看详细信息

RSS列 表示 程序占用少物理内存 虚拟内存用考虑并占用实际物理内存 (2). top 命令 其VIRT(或VSS)列 表示程序占用少虚拟内存 同 ps aux VSZ列 RES列 表示 程序占用少物理内存同 ps aux RSS列 2.linux 查看前系统占用少内存 般命令 free其 free系统少内存使用由于 linux 系统内存使用原则 内存宝贵 能使用少使用少 所 linux已经调用包缓存起放内存实际使用内存理解 free+buffers+cached3.解完些命令 再使用ps aux 命令查看候 发现奇怪现象 所 RSS 列数据加起 比物理内存数要 比 物理内存2G RSS列数据加起能5G 事 RSS列值骗我 linux内存机制: 运行程序 linux调用该程序依赖链接库 lib.xx.so 首先看该链接库否映射进内存没映射则代码段与数据段映射内存否则其加入进程址空间 N程序依赖lib.xx.so候 实际内存lib.xx.so N RSS显示程序占用实际物理内存 lib.xx.so算进 比 X程序 本身占用内存5M lib.xx.so 占用内存2Mlib.xx.soN程序共享依赖 则RSS显示X程序运行占用内存7M 实际 X程序占用5M空间 余2m讨入RSS 用ps aux显示内存占用情况 N共享依赖lib.xx.soN程序都2m空间算自RSS RSSsum值比实际物理内存 linux内存使用机制复杂 句两句能说清楚简单说明 ps auxRSS值 并能真实反映物理内存使用情况 4. 查看更详细内存使用情况 用几种 或者几种结合使用:几种都需要root账户权限(1). pmap -d $pid $pid 运行程序pid(2). cat /proc/$pid/smaps smaps数据比较详细简单归纳归纳命令: cat /proc/$pid/smaps | awk '/Size|Rss|Pss|Shared|Private|Referenced|Swap/{val_name=gensub(/([a-zA-Z_]*).*/,"\\1",1,$1)list[val_name]+=$2}END{for(val in list)print val,list[val]}' (3). cat /proc/$pid/maps(4). cat /proc/$pid/statm输解释第列 size:任务虚拟址空间 第二列 Resident:使用物理内存 第三列 Shared:共享页数第四列 Trs:程序所拥执行虚拟内存 第五列 Lrs:映像倒任务虚拟内存空间库 第六列 Drs:程序数据段用户态栈 第七列 dt:脏页数量(5). vmstat命令据说提供些参考信息具体未研究 5.作phper尝试使用php函数memory_get_usage() 该函数能php前运行程序实际真占用内存数量 真想php真占用内存 概能, 程序运行始执行memory_get_usage(). 程序运行结束执行memory_get_usage() 两者值相减值 应该相比较准确内存占用数量 没测试 考虑 数量没实际意义 加平比较忙懒试

 [root@scs-2 tmp]# freetotal used free shared buffers cachedMem: 3266180 3250004 16176 0 110652 2668236-/+ buffers/cache: 471116 2795064Swap: 2048276 80160 1968116下面是对这些数值的解释:total:总计物理内存的大小。used:已使用多大。free:可用有多少。Shared:多个进程共享的内存总额。Buffers/cached:磁盘缓存的大小。第三行(-/+ buffers/cached):used:已使用多大。free:可用有多少。第四行就不多解释了。区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。如上例:2795064=16176+110652+2668236接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:cat /proc/meminfo[root@scs-2 tmp]# cat /proc/meminfoMemTotal: 3266180 kBMemFree: 17456 kBBuffers: 111328 kBCached: 2664024 kBSwapCached: 0 kBActive: 467236 kBInactive: 2644928 kBHighTotal: 0 kBHighFree: 0 kBLowTotal: 3266180 kBLowFree: 17456 kBSwapTotal: 2048276 kBSwapFree: 1968116 kBDirty: 8 kBWriteback: 0 kBMapped: 345360 kBSlab: 112344 kBCommitted_AS: 535292 kBPageTables: 2340 kBVmallocTotal: 536870911 kBVmallocUsed: 272696 kBVmallocChunk: 536598175 kBHugePages_Total: 0HugePages_Free: 0Hugepagesize: 2048 kB用free -m查看的结果:[root@scs-2 tmp]# free -mtotal used free shared buffers cachedMem: 3189 3173 16 0 107 2605-/+ buffers/cache: 460 2729Swap: 2000 78 1921查看/proc/kcore文件的大小(内存镜像):[root@scs-2 tmp]# ll -h /proc/kcore-r——– 1 root root 4.1G Jun 12 12:04 /proc/kcore备注:占用内存的测量测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。/proc/meminfo 机器的内存使用信息/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。/proc/pid/statm 进程所占用的内存[root@localhost ~]# cat /proc/self/statm654 57 44 0 0 334 0输出解释CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:参数 解释 /proc//statusSize (pages) 任务虚拟地址空间的大小 VmSize/4Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4Shared(pages) 共享页数 0Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4dt(pages) 04查看机器可用内存/proc/28248/>freetotal used free shared buffers cachedMem: 1023788 926400 97388 0 134668 503688-/+ buffers/cache: 288044 735744Swap: 1959920 89608 1870312我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以 空闲内存=free+buffers+cached=total-used

1. 前言

本文主要讲解在Linux系统上怎么查看某个文件夹大小。我们将会使用du命令。

du命令是“disk usage磁盘使用情况”的缩写,它报告给定文件或文件夹使用的磁盘空间的估计数。它对于查找占用大量磁盘空间的文件和文件夹非常有用。

linux怎么查看某个文件夹大小

2. 如何使用`du`命令查看某个文件夹大小

du命令的使用语法:

du [OPTIONS]... FILE...

如果给定的文件是一个文件夹,du将总结该目录中每个文件和子文件夹的磁盘使用情况。如果没有指定文件,du将报告当前工作目录的磁盘使用情况。

在没有任何选项的情况下执行du时,以字节为单位显示给定文件或文件夹及其子文件夹的磁盘使用情况。

du ~/Documents

您还可以将多个文件和文件夹作为参数传递给du命令:

du ~/Documents ~/Pictures ~/.zshrc

如果您在没有权限的文件或目录上运行du,您将得到类似“du:无法读取目录”的内容。在这种情况下,需要在命令前加上sudo。

du命令有很多选项,我们只列出最常用的。

-a选项告诉du报告目录中每个文件的磁盘空间使用情况。

du -a ~/Documents

通常,您希望仅以人类可读易读的格式查看给定文件夹占用的空间。为此,使用-h选项。

例如,要查看/var/lib及其所有子文件夹的总大小,可以运行以下命令:

sudo du -h /var

我们使用sudo是因为/var/lib目录中的大多数文件和目录都属于root用户,普通用户无法读取。输出将是这样的:

4.0K /var/lib/apt/mirrors/partial

5.8.0K /var/lib/apt/mirrors

205M /var/lib/apt

2.9G /var/lib/

若要只报告指定目录的总大小,而非子文件夹,请使用-s选项:

sudo du -sh /var

输出结果:

2.9G /var

-c选项告诉du报告一个总数。当您希望获得两个或多个目录的合并大小时,这是非常有用的。

sudo du -csh /var/log /var/lib

输出结果:

1.2G /var/log

2.9G /var/lib

4.1G total

如果希望显示n-level子目录的磁盘使用情况,请使用--max-depth选项并指定子文件夹级别。例如,要获得关于您将使用的第一级文件夹的报告:

sudo du -h --max-depth=1 /var/lib

输出结果如下:

544K /var/lib/usbutils

4.0K /var/lib/acpi-support

205M /var/lib/apt

2.9G /var/lib

du实用程序的默认行为是重新分配目录或文件使用的磁盘空间。要查找文件的表观大小,请使用选项--apparent-size。文件的“apparent-size”是文件中实际有多少数据。

sudo du -sh --apparent-size /var/lib

输出结果:

2.9G /var/lib

du还允许您使用shell模式。例如,要获得主目录中以“Do”开头的所有文件夹的大小,可以运行以下命令:

sudo du -csh ~/Do*

输出结果:

102M /home/zcwyou/Documents

358M /home/zcwyou/Downloads

460M total

linux使用du命令查看某个文件夹大小

3. `du`与其它命令结合查看某个文件夹大小

du命令可以与带有管道的其他命令相结合。

例如,要打印/var目录中最大的5个文件夹,您需要将du的输出传递给sort命令,按照文件夹的大小对文件夹进行排序,然后将输出传递给head命令,head命令只打印前5个文件夹:

sudo du -h /var/ | sort -rh | head -5

执行结果:

4.6G /var/

2.9G /var/lib

2.6G /var/lib/snapd

1.7G /var/lib/snapd/snaps

du与其它命令结合查看某个文件夹大小

4. 总结

现在您应该已经很好地理解了如何使用du命令。

与df不同,df打印关于挂载文件系统的磁盘使用情况的信息,du命令给出给定文件或文件夹使用的磁盘空间的估计值。

您可以通过在终端中键入man du来查看所有可用的du命令选项。

如果您有任何问题或反馈,请在下方留言。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7518480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存