在 Linux 中获取和设置最大线程数
“术语“进程”是指当前正在运行的程序,而“线程”是指轻量级进程。当多个线程通过共享同一内存在程序中执行时,称为多线程。在多线程进程中,您可以同时运行多个线程,因为目的是提高性能。
Linux 中的线程数量对于有效性能是有限制的。设置threads-max内核参数可确保每个进程的线程数保持在该限制或低于该限制。如果您还想了解如何设置最大线程数,请阅读我们的指南。在本指南中,我们将解释如何在 Linux 中获取和设置最大线程数。 ”
在 Linux 中获取和设置最大线程数
让我们将本节分为两部分;第一个是获取线程数,另一个是设置最大线程数。
获取最大线程数
您可以使用thread-max内核参数控制最大线程数。 “file /proc/sys/kernel/threads-max ”定义此参数。
使用“cat”命令,可以查看该文件。
这里,输出 45444 显示内核可以执行的最大 45444 个线程。
您还可以使用“sysctl”命令查找线程最大值。
此外,“vm.max_map_count”和“kernel.pid_max”指定了两个额外的限制。这些限制还阻止在高负载期间创建新线程。
它指定 PID 环绕的最大数量。
这里kernel.pid_max的最大值是4194304。这意味着内核最多可以同时执行4194304个进程。
一个进程只能在“max_map_count”参数下拥有一定数量的虚拟内存区域(VMA)。
进程的内存映射区域如上面的输出所示。
Linux 内核中线程和进程的工作方式类似。因此,限制进程数的值也间接限制了线程数。因此,kernel.pid_max 必须大于进程和线程的总数。
许多线程在服务器上工作会消耗更多内存。 “vm.max_map_count”限制线程和虚拟内存的数量,以供那些需要此内存来设置其私有堆栈的人使用。
systemd 系统的另一个限制是“cgroup pids.max”参数,默认为 12,288。有时,此默认资源限制可能过于严格或不够。
或者,对 systemd 的某些taskMax 设置进行特定调整可能会很有用。 “UserTasksMax ” 参数会覆盖 /etc/systemd/logind.conf 的 [login] 部分中的默认限制。
正如 systemd 对从登录 shell 运行的程序强制执行线程限制一样,它也执行相同的操作。
设置最大线程数
到目前为止,我们已经了解了不同参数的最大线程数,现在将了解如何设置这些最大线程数。有多种选项可用于设置每个进程的最大线程数。此处为特定进程设置线程号。
使用以下命令,您可以在运行时临时设置threads-max内核参数。
另外,您可以通过将 kernel.threads-max=
现在我们将pid_max参数设置为200000。这意味着内核最多可以同时执行200,000个进程。
您还可以使用“max_map_count”参数指定进程可以拥有的 VMA 或虚拟内存区域的最大数量。
对于所有用户,“UserTasksMax”设置线程限制并指定 systemd 系统上的 TasksMax 设置。
echo "UserTasksMax=60000" >> /etc/systemd/system.conf
grep -i "UserTasksMax" /etc/systemd/logind.conf
系统参数还可能在内存和操作系统成为限制因素之前限制每个进程的线程数量。通过减少每个线程的堆栈大小也可以增加线程数量。
包起来
在本指南中,我们解释了多线程或多线程进程。接下来,我们统计一下每个进程的最大线程数限制,了解一下最大线程数的重要性。获取所有这些信息后,我们可以设置线程的最大值。
您可以通过多种方式设置线程的最大值,我们已在本指南中对此进行了解释。通过查看和理解这一点,您还可以设置 Linux 中线程的最大值。