在基于 Linux 的系统上启动进程所需的最小内存量是多少?

在基于 Linux 的系统上启动进程所需的最小内存量是多少?

两种语言的例程都很便宜:每个 goroutine 为 2KB,而 Elixir 进程每个为 0.5KB。

我明白要启动一个进程光束需要 0.5KB 内存。在这种情况下这是如此轻量灵丹妙药和 Erlang,并且在较小程度上与其他依赖于自己的不那么便宜的进程和线程的语言相比,这似乎是使用这些运行时的优势,或者在底层操作系统上的进程和线程(据说也需要更多内存)。

我想知道在基于 Linux 的系统上启动一个进程需要多少内存。我知道内存使用情况取决于进程正在执行的操作。但我认为仅仅启动一个不执行任何操作的进程会产生内存成本)。那成本是多少?
我在哪里可以阅读更多相关内容?是否有任何文件/命令可以用来检查它?

答案1

task_struct在Linux上,任何线程或进程至少会产生内核中a的成本;在我的系统上,pahole task_struct它告诉我这需要 9,344 字节。在用户空间中,线程还需要为其分配一个堆栈,但实际成本将取决于它实际使用的堆栈空间量(因为只有触及的页面才会被分配)。

您可以使用以下示例程序man pthread_attr_initpthread_create。后者特别允许您控制堆栈大小和创建的线程数量,这意味着可以通过运行它并测量它使用的内存量来估计用户空间中单个线程的成本。 GNUtime对大量运行进行平均,建议在此特定场景中每个线程 48KiB 的惩罚,堆栈大小为 64KiB。

分叉的成本更高,因为这涉及为进程创建新的地址空间,以及内核和页表条目中的相关结构。

相关内容