【问题标题】:free the memory from a process in linux?从Linux中的进程中释放内存?
【发布时间】:2026-01-18 09:25:02
【问题描述】:

当我运行 pmap <pid> 时,它在下面列出了我

 00007f545bbc5000   1016K rw---    [ anon ]
 00007f545bd0c000     76K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545bd1f000   2044K -----  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545bf1e000      4K rw---  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545c1bc000     52K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswresample.so
 00007f545c3ca000     12K -----    [ anon ]
 00007f545c3cd000   1016K rw---    [ anon ]
 00007f545c4cd000   2048K rw---    [ anon ]
 00007f545c6cd000     12K -----    [ anon ]
 00007f545c6d0000   1016K rw---    [ anon ]
 00007f545c812000   1676K r--s-  /opt/openmrs/lucene/indexes/org.openmrs.PersonAttribute/_1y_Lucene41_0.pos
 00007f545c9b5000    108K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libswresample.so.2
 00007f545cbd2000     12K -----    [ anon ]
 00007f545cbd5000   1016K rw---    [ anon ]

当我运行命令时,我可以看到一个进程的详细信息。但, 这里[anon] 正在占用一些内存。我可以释放那段记忆吗?

在这里我不想终止进程。只想从该进程中释放内存。

提前致谢

【问题讨论】:

  • 不,因为进程(大概)正在使用它。好比说“这个人的心脏在占用空间和能量,我可以去掉吗”?你可以,使用kill <pid> ;)
  • 我不想终止进程。但我想从该过程中释放内存。在我们的情况下,终止进程将无济于事。重新启动该过程对我们来说需要很多时间
  • 相关,请参阅Will malloc implementations return free-ed memory back to the system? 不过与匿名映射不太一样。

标签: linux memory-management memory-leaks htop pmap


【解决方案1】:

这取决于你的意思。很可能,答案是否定的,因为这是给定进程不同部分的内存消耗列表。您通常对这些部分没有影响。 [ anon ] 只是表示这部分没有可以显示的特定name,因此它被声明为匿名。 (它可能是进程的主程序,而不是该进程中使用的某些库。)

释放该内存的唯一方法是结束进程,无论是通过催促它终止(可能通过 GUI)还是通过发送信号(例如通过kill (1))。

从外部释放内存的任何其他方式(不存在接口,但可以使用调试器或类似工具来做到这一点)意味着干预运行进程的事务。这是不可取的。该进程迟早会访问它分配的内存。如果不再分配,它将被发送一个 SEGFAULT 并因此通常终止。

话虽如此,您可能正在考虑更改程序以分配更少的内存。在这种情况下,这个问题太宽泛了,并且严重依赖于您正在查看的程序。

【讨论】: