所以我的系统已经DOS了,或者我刚刚打开了一个巨大的文件(openstreetmaps planet.osm)。 系统完全没有响应…所以没有响应,需要大约10分钟才能进入我的shell,运行顶部,并杀死违规stream程。 我准备好按重置button。
问题:是否有可能留出一定的最小数量的系统资源,如果我的系统挂钩,我仍然有2%cpu(2ghz系统〜40 mhz!) – 应该是足够的shell是吗?我的意思是,它的工作在90年代初)在什么地方搁置? 或者采取某种方法来遏制违规stream程?
在这种情况下,我希望操作系统能够控制失控进程,这样我仍然可以使用这个系统,即使这意味着总体性能下降10%。 在这样的情况下行事的能力,而不是完全无奈的会是…很好。
有趣的是,你说“很好”。 一个解决scheme是“renice”违规的过程,以便它不会占用CPU(本质上降低了应用程序的优先级)。
要启动一个优先级较低的进程:
nice <program> &
要更改正在运行的进程的优先级:
renice 4 <program>
优先级的范围从-20到20. 0是默认的,20是最低优先级,-20是最高优先级。
您可以编写一个脚本来查找在tty0或ttyS0上运行的进程,或者您希望进行优先级rootlogin的任何位置,并将这些进程设置为实时调度优先级。 脚本本身应该以实时优先级开始。
在交换风暴期间访问内存是一项艰巨的任务。 你可以使用Linux cgroups。 你可以用C代替脚本编写程序,并使用mlockall把它的内存locking到RAM中。 然后该程序可以使用ptrace来捅入其他进程并强制他们调用mlockall。 你可以用它来得到一个不受swap影响的bash shell。
除非你是一个程序员,或者可以find一个已经写这个(我没有)的人,否则cgroups可能是一个更简单的方法来保留一些高优先级的内存。