Linux上的内存使用情况与`free`不匹配

前端之家收集整理的这篇文章主要介绍了Linux上的内存使用情况与`free`不匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一台 Linux机器在软件方面没有运行太多,但是在某种程度上使用了1.7GB的2GB已安装内存.当我自由奔跑时,我得到:
  1. total used free shared buffers cached
  2. Mem: 2072616 1979972 92644 0 164876 129740
  3. -/+ buffers/cache: 1685356 387260
  4. Swap: 498004 1632 496372

当我运行顶部时,我获得与第一行免费相同的数字(由于内存使用现已自行修复,因此无法重现).

但是,当我运行ps aux时,所有进程的内存使用量仅为295.9MB,这与使用免费报告的1.7GB内存相差甚远.

为什么会出现这种差异?

编辑:

这是请求的额外信息,但我认为它不会有多大帮助,因为我现在显示〜使用免费使用360MB,使用ps aux总计使用~300MB.不确定为什么问题会自行纠正.

自由

  1. total used free shared buffers cached
  2. Mem: 2072616 668484 1404132 0 185868 139196
  3. -/+ buffers/cache: 343420 1729196
  4. Swap: 498004 1632 496372

cat / proc / meminfo

  1. MemTotal: 2072616 kB
  2. MemFree: 1404628 kB
  3. Buffers: 185792 kB
  4. Cached: 139196 kB
  5. SwapCached: 544 kB
  6. Active: 411448 kB
  7. Inactive: 210208 kB
  8. Active(anon): 218636 kB
  9. Inactive(anon): 78216 kB
  10. Active(file): 192812 kB
  11. Inactive(file): 131992 kB
  12. Unevictable: 0 kB
  13. Mlocked: 0 kB
  14. HighTotal: 1187784 kB
  15. HighFree: 761112 kB
  16. LowTotal: 884832 kB
  17. LowFree: 643516 kB
  18. SwapTotal: 498004 kB
  19. SwapFree: 496372 kB
  20. Dirty: 60 kB
  21. Writeback: 0 kB
  22. AnonPages: 296168 kB
  23. Mapped: 14536 kB
  24. Shmem: 184 kB
  25. Slab: 39088 kB
  26. SReclaimable: 31720 kB
  27. SUnreclaim: 7368 kB
  28. KernelStack: 888 kB
  29. PageTables: 1184 kB
  30. NFS_Unstable: 0 kB
  31. Bounce: 0 kB
  32. WritebackTmp: 0 kB
  33. CommitLimit: 1534312 kB
  34. Committed_AS: 407808 kB
  35. VmallocTotal: 122880 kB
  36. VmallocUsed: 5132 kB
  37. VmallocChunk: 112808 kB
  38. DirectMap4k: 12280 kB
  39. DirectMap4M: 897024 kB

ps aux

  1. USER PID %cpu %MEM VSZ RSS TTY STAT START TIME COMMAND
  2. root 1 0.0 0.0 1620 548 ? Ss May18 0:04 init [3]
  3. root 2 0.0 0.0 0 0 ? S May18 0:00 [kthreadd]
  4. root 3 0.0 0.0 0 0 ? S May18 0:00 [migration/0]
  5. root 4 0.0 0.0 0 0 ? S May18 0:00 [ksoftirqd/0]
  6. root 5 0.0 0.0 0 0 ? S May18 0:00 [watchdog/0]
  7. root 6 0.0 0.0 0 0 ? S May18 0:00 [migration/1]
  8. root 7 0.0 0.0 0 0 ? S May18 0:00 [ksoftirqd/1]
  9. root 8 0.0 0.0 0 0 ? S May18 0:00 [watchdog/1]
  10. root 9 0.0 0.0 0 0 ? S May18 0:00 [events/0]
  11. root 10 0.0 0.0 0 0 ? S May18 0:00 [events/1]
  12. root 11 0.0 0.0 0 0 ? S May18 0:00 [khelper]
  13. root 17 0.0 0.0 0 0 ? S May18 0:00 [async/mgr]
  14. root 166 0.0 0.0 0 0 ? S May18 0:00 [sync_supers]
  15. root 168 0.0 0.0 0 0 ? S May18 0:00 [bdi-default]
  16. root 170 0.0 0.0 0 0 ? S May18 0:03 [kblockd/0]
  17. root 171 0.0 0.0 0 0 ? S May18 0:03 [kblockd/1]
  18. root 174 0.0 0.0 0 0 ? S May18 0:00 [kacpid]
  19. root 175 0.0 0.0 0 0 ? S May18 0:00 [kacpi_notify]
  20. root 176 0.0 0.0 0 0 ? S May18 0:00 [kacpi_hotplug]
  21. root 332 0.0 0.0 0 0 ? S May18 0:00 [ata/0]
  22. root 333 0.0 0.0 0 0 ? S May18 0:00 [ata/1]
  23. root 334 0.0 0.0 0 0 ? S May18 0:00 [ata_aux]
  24. root 336 0.0 0.0 0 0 ? S May18 0:00 [kseriod]
  25. root 371 0.0 0.0 0 0 ? S May18 0:00 [rpciod/0]
  26. root 372 0.0 0.0 0 0 ? S May18 0:00 [rpciod/1]
  27. root 406 0.0 0.0 0 0 ? S May18 0:00 [khungtaskd]
  28. root 407 0.0 0.0 0 0 ? S May18 0:20 [kswapd0]
  29. root 408 0.0 0.0 0 0 ? S May18 0:00 [aio/0]
  30. root 409 0.0 0.0 0 0 ? S May18 0:00 [aio/1]
  31. root 410 0.0 0.0 0 0 ? S May18 0:00 [nfsiod]
  32. root 411 0.0 0.0 0 0 ? S< May18 0:00 [kslowd000]
  33. root 412 0.0 0.0 0 0 ? S< May18 0:00 [kslowd001]
  34. root 414 0.0 0.0 0 0 ? S May18 0:00 [crypto/0]
  35. root 415 0.0 0.0 0 0 ? S May18 0:00 [crypto/1]
  36. root 1172 0.0 0.0 0 0 ? S May18 0:00 [scsi_tgtd/0]
  37. root 1173 0.0 0.0 0 0 ? S May18 0:00 [scsi_tgtd/1]
  38. root 1177 0.0 0.0 0 0 ? S May18 0:00 [scsi_eh_0]
  39. root 1215 0.0 0.0 0 0 ? S May18 0:00 [kpsmoused]
  40. root 1228 0.0 0.0 0 0 ? S May18 0:05 [jbd2/sda3-8]
  41. root 1229 0.0 0.0 0 0 ? S May18 0:00 [ext4-dio-unwr]
  42. root 1230 0.0 0.0 0 0 ? S May18 0:00 [ext4-dio-unwr]
  43. root 1322 0.0 0.0 2044 632 ? S<s May18 0:00 /sbin/udevd --d
  44. root 1650 0.0 0.0 0 0 ? S May18 0:25 [vmmemctl]
  45. root 1678 0.0 0.0 0 0 ? S May18 0:00 [kjournald]
  46. root 1680 0.0 0.0 0 0 ? S May18 0:00 [ksuspend_usbd]
  47. root 1681 0.0 0.0 0 0 ? S May18 0:00 [khubd]
  48. root 1709 0.0 0.0 0 0 ? S May18 0:02 [flush-8:0]
  49. root 3157 0.0 0.0 5976 1576 ? Ss May18 0:10 /usr/bin/vmtool
  50. root 3222 0.0 0.0 5984 276 ? S May18 0:00 supervising sys
  51. root 3223 0.0 0.0 6220 1452 ? Ss May18 0:00 /usr/sbin/syslo
  52. root 3224 0.0 0.0 4428 1240 ? S May18 0:00 /bin/sh /etc/sy
  53. clamav 3808 0.1 11.4 256396 237488 ? SNsl May18 2:44 /usr/sbin/clamd
  54. clamav 3818 0.0 0.0 12368 1684 ? SNs May18 0:03 /usr/bin/freshc
  55. root 3984 0.0 0.0 4048 1164 ? Ss May18 0:00 /usr/sbin/ntpd
  56. root 4106 0.0 0.0 14228 1868 ? Ss May18 0:00 /usr/sbin/smbd
  57. root 4115 0.0 0.0 8360 1128 ? Ss May18 0:00 /usr/sbin/nmbd
  58. root 4119 0.0 0.0 14228 852 ? S May18 0:00 /usr/sbin/smbd
  59. root 4176 0.0 0.0 8488 1832 ? Ss May18 0:00 sendmail: accep
  60. smmsp 4179 0.0 0.0 8212 1372 ? Ss May18 0:00 sendmail: Queue
  61. root 4235 0.0 0.1 9824 2700 ? S May18 0:06 /usr/sbin/snmpd
  62. root 4295 0.0 0.0 5684 1060 ? Ss May18 0:00 /usr/sbin/sshd
  63. root 4415 0.0 0.0 2044 512 ? S< May18 0:00 /sbin/udevd --d
  64. uptimed 4456 0.0 0.0 1620 440 ? Ss May18 0:00 /usr/sbin/uptim
  65. root 4515 0.0 0.0 3456 716 ? Ss May18 0:00 /usr/sbin/cron
  66. root 4609 0.0 0.0 1672 668 tty1 Ss+ May18 0:00 /sbin/agetty 38
  67. root 4610 0.0 0.0 1672 668 tty2 Ss+ May18 0:00 /sbin/agetty 38
  68. root 4611 0.0 0.0 1676 672 tty3 Ss+ May18 0:00 /sbin/agetty 38
  69. root 4612 0.0 0.0 1672 668 tty4 Ss+ May18 0:00 /sbin/agetty 38
  70. root 4613 0.0 0.0 1668 664 tty5 Ss+ May18 0:00 /sbin/agetty 38
  71. root 4614 0.0 0.0 1668 664 tty6 Ss+ May18 0:00 /sbin/agetty 38
  72. root 8761 0.0 0.1 8740 3000 ? Ss 02:02 0:02 sshd: root@nott
  73. root 8763 0.0 0.0 5356 1632 ? Ss 02:02 0:02 /usr/lib/misc/s
  74. root 8774 0.0 0.1 8744 2988 ? Ss 02:02 0:00 sshd: root@nott
  75. root 8776 0.0 0.0 5368 1632 ? Ss 02:02 0:00 /usr/lib/misc/s
  76. root 8787 0.0 0.1 8736 2944 ? Ss 02:02 0:00 sshd: root@nott
  77. root 8789 0.0 0.0 5232 1520 ? Ss 02:02 0:00 /usr/lib/misc/s
  78. root 8812 0.0 0.1 8740 3000 ? Ss 02:04 0:12 sshd: root@nott
  79. root 8814 0.0 0.0 5416 1676 ? Ss 02:04 0:13 /usr/lib/misc/s
  80. root 8825 0.0 0.1 8744 2992 ? Ss 02:04 0:00 sshd: root@nott
  81. root 8827 0.0 0.0 5352 1628 ? Ss 02:04 0:00 /usr/lib/misc/s
  82. root 8838 0.0 0.1 8880 3080 ? Ss 02:04 0:00 sshd: root@nott
  83. root 8840 0.0 0.0 5436 1768 ? Ss 02:04 0:00 /usr/lib/misc/s
  84. root 15237 0.0 0.1 8744 2856 ? Ss 16:00 0:00 sshd: hudson-sl
  85. 1000 15239 0.0 0.0 8884 1844 ? S 16:00 0:00 sshd: hudson-sl
  86. 1000 15240 0.0 0.0 2908 1084 ? Ss 16:00 0:00 bash -c wget --
  87. 1000 15242 0.2 2.1 671620 44412 ? Sl 16:00 0:08 /etc/java-confi
  88. root 15575 0.0 0.1 8768 3008 ? Ss 16:25 0:00 sshd: root@pts/
  89. root 15577 0.0 0.0 4304 1012 pts/0 Ss+ 16:25 0:00 /usr/bin/screen
  90. root 15620 0.0 0.1 5428 2100 ? Ss 16:25 0:00 /usr/bin/SCREEN
  91. root 15621 0.0 0.1 5304 2576 pts/1 Ss+ 16:25 0:00 -/bin/bash
  92. smmsp 15875 0.0 0.1 8492 3476 ? S 16:54 0:00 sendmail: o4JLs
  93. root 15888 0.0 0.1 8768 3004 ? Ss 16:58 0:00 sshd: root@pts/
  94. root 15890 0.0 0.0 4316 1028 pts/2 Ss+ 16:59 0:00 /usr/bin/screen
  95. root 15933 0.0 0.1 5432 2096 ? Ss 16:59 0:00 /usr/bin/SCREEN
  96. root 15934 0.1 0.1 5304 2604 pts/3 Ss 16:59 0:00 -/bin/bash
  97. root 16021 0.0 0.0 3856 1060 pts/3 R+ 17:00 0:00 ps aux

解决方法

However,when I run ps aux,the memory usage of all processes only comes out to 295.9MB,which is a far cry from the 1.7GB of memory that free reports as used.

Why is there such a discrepancy?

因为linux内存管理只是简单的古怪?

抛开笑话,认真对待 – Linux中的内存管理并不是一个简单的野兽. “查看”“免费”和“使用”的内容有不同的方法,以及even the most obvious number might not be so obvious once you look into it.我认为您可能想要量化“使用”的定义,然后将该定义应用于您正在查看的数字,特别是关于你使用的数字.

> Are you taking into account shared memory?根据您使用“计算”​​的方式,程序的内存可以很小或更大,更大.您是否单独计算共享内存,或者好像连接到它的每个进程都拥有它?
> Shared libraries也可以具有相同的行为:程序加载与另一个程序共享的库(libmylibrary.so).一种内存视图表明该库不计入使用的内存;另一个视图说它不仅会,但它会计算两次 – 一次用于刚刚使用它的程序,再次用于已经使用它的程序,因为每个程序都需要虚拟内存映射才能使库工作.第三种观点认为库实际上只占用了加载它所需的内存.哪一个是“正确”的记忆观?>磁盘缓存/缓冲区还可以创建“使用”与“免费”的复杂视图.系统将耗尽程序未使用的内存,但如果需要内存来加载程序,则会丢弃缓存并重新使用以加载该程序的实例.您可以轻松地在内存中加载3Mbyte代码,但消耗600Mbyte的磁盘缓存.再一次,哪一个是“正确的”观点?

猜你在找的Linux相关文章