因此,我有一个任务关键型但资源占用并不大的 node.js 程序,该程序在 Ubuntu 18 virtualbox 上的一个终端上全天候运行,并且我需要使用一两个额外的终端进行开发和研究。最终,我会在云 VPS 或第二台机器上安装第一个程序,但现在它在我的主工作站上。
我对此还很新手,所以请原谅我的问题,但是:
多个终端是否完全沙盒化?
如果我在第二个终端上运行 CPU/内存密集型操作,除了使用整体资源之外,它还会以任何方式干扰第一个终端吗?
有没有一个好的方法可以为关键任务终端优先分配网络、CPU 和内存资源?
答案1
“终端”本身并不是node
实际执行工作的进程。您在终端上看到的输出仅仅是进程的stdin
一种表现形式。stdout
进程本身将被调用,node
并且其功能与终端没有直接关联,除非终端关闭时(即,SIGHUP
由于它是终端的子进程,因此被发送到进程),进程将被关闭,因为终端通过分叉自身并将其内容替换为您的应用程序来创建进程。可以通过在命令末尾添加一个(使其忽略)或在或会话内运行命令(推荐,因为您可以轻松地重新连接)node
来规避此问题&
SIGHUP
screen
tmux
因此回答你的问题
由于终端实际上并不“包含”你的进程,因此它们之间实际上没有任何隔离。如果任何进程具有 root 访问权限,它就可以干扰任何其他进程
这一切都取决于
nice
相关进程的 ness 值,因为如果将更多的总体 CPU 时间分配给具有较低值的进程,则如果系统被推到极限,nice
则可能会减慢任何其他具有较高值的进程的速度nice
nice
允许您设置进程的“优先级”,优先级越低,优先级越高。至于网络,您可以使用它trickle
来调整带宽
无论如何,在用于研究/开发工作的系统上运行任何关键任务都不是最佳选择,应尽可能避免