从 linux 中的进程释放内存?
free the memory from a process in linux?
当我 运行 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 ]
当我 运行t 命令时,我可以看到一个进程的详细信息。但,
这里 [anon]
占用了一些内存。我可以释放那段记忆吗?
这里我不想杀进程。只想从该进程中释放内存。
提前致谢
这取决于你的意思。答案很可能是否定的,因为这是给定进程不同部分的内存消耗列表。您通常对这些部分没有影响。 [ anon ]
只是表示这部分没有具体的 name 可以显示,所以它被声明为匿名。 (它可能是进程的主程序,而不是该进程中使用的某些库。)
释放该内存的唯一方法是结束该进程,无论是通过敦促它终止(可能通过 GUI)还是通过向它发送信号(例如通过 kill (1)
)。
从外部释放内存的任何其他方式(不存在接口,但可以使用调试器或类似工具来实现)意味着干涉 运行 进程的事务。这是不可取的。该进程迟早会访问它分配的内存。如果不再分配,它将被发送一个 SEGFAULT,因此通常会终止。
也就是说,您可能正在考虑更改程序以分配更少的内存。在这种情况下,问题太宽泛了,将在很大程度上依赖于您正在查看的程序。
当我 运行 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 ]
当我 运行t 命令时,我可以看到一个进程的详细信息。但,
这里 [anon]
占用了一些内存。我可以释放那段记忆吗?
这里我不想杀进程。只想从该进程中释放内存。
提前致谢
这取决于你的意思。答案很可能是否定的,因为这是给定进程不同部分的内存消耗列表。您通常对这些部分没有影响。 [ anon ]
只是表示这部分没有具体的 name 可以显示,所以它被声明为匿名。 (它可能是进程的主程序,而不是该进程中使用的某些库。)
释放该内存的唯一方法是结束该进程,无论是通过敦促它终止(可能通过 GUI)还是通过向它发送信号(例如通过 kill (1)
)。
从外部释放内存的任何其他方式(不存在接口,但可以使用调试器或类似工具来实现)意味着干涉 运行 进程的事务。这是不可取的。该进程迟早会访问它分配的内存。如果不再分配,它将被发送一个 SEGFAULT,因此通常会终止。
也就是说,您可能正在考虑更改程序以分配更少的内存。在这种情况下,问题太宽泛了,将在很大程度上依赖于您正在查看的程序。