这本质上是“ Linux:如何显式取消所有可能的交换? ”的反面。
我想在运行我知道会大量使用系统内存的进程之前最大化可用的可用内存量,并且我不希望它长时间暂停,直到操作系统意识到应该换掉其他所有东西.
另外,我知道很多程序都有内存,它们只在初始化时使用,然后再也不碰了。
我该如何做到这一点?
我试过这样做sysctl vm.swappiness=100
,但这几乎没有换掉任何东西。
这本质上是“ Linux:如何显式取消所有可能的交换? ”的反面。
我想在运行我知道会大量使用系统内存的进程之前最大化可用的可用内存量,并且我不希望它长时间暂停,直到操作系统意识到应该换掉其他所有东西.
另外,我知道很多程序都有内存,它们只在初始化时使用,然后再也不碰了。
我该如何做到这一点?
我试过这样做sysctl vm.swappiness=100
,但这几乎没有换掉任何东西。
一旦内存需要用于其他目的,未使用的初始化代码将被释放。(它将由从中读取的文件支持。)
Linux 上的内存分页机制设计精良,并且经过多年测试。您很少会想要将任何进程从内存中交换出来。这将导致在调度交换进程执行时出现繁重的分页活动。
如果您确实需要其他应用程序的内存,那么您的内存太少了。
STOP
您可以通过使用命令向它们发送信号来阻止其他程序执行kill
。请小心您停止哪些程序,否则您可能会将自己锁定在系统之外。如果您在流程启动期间遇到较大的停顿,请考虑使用
sar
来确定瓶颈所在。您还可以使用top
来确定哪个进程正在被大量分页或交换。如果您的流程出现问题,请不要感到惊讶。我运行过严重缺乏内存的服务器。要执行启动,必须限制在任何时间启动的进程数量。即使内存被过度使用,进程也几乎立即启动。
如果您真的想强制所有可能的内存溢出,您可以编写一个程序来分配所需的内存量并连续写入分配内存的每一页几个循环。它将遇到您想要避免的所有问题。
您可以通过删除缓存(pagecache、dentries 和 inode)来实现您想要完成的任务。
将清除它们。
可以在以下位置找到更多信息:Linux 内存管理 - 丢弃缓存