让我们了解一个进程和一个线程之间的区别,可以先查看进程和线程之由来。
典型的区别在于:
- 同一进程的线程共享内存空间。
- 而进程则在不同的内存空间中运行
pid_max
cat /proc/sys/kernel/pid_max
32768
所以上面的命令返回32768
,这意味着我可以在我的系统中同时执行32768
个进程,这些进程可以在不同的内存空间
中运行。
threads-max
cat /proc/sys/kernel/threads-max
126406
上面的命令将输出返回为126406
,这意味着我可以在共享内存空间中拥有126406个线程
。
ulimit -u
ulimit -u
63203
现在,让我们使用第三个参数ulimit -u
,它表示用户在特定时间可以拥有的总进程数
。上面的命令将输出返回为63203。这意味着用户可以在某个时间点创建的所有进程都可以运行63203
进程。
假设案例
假设2个用户同时运行2个进程,并且每个进程大量消耗内存,则这2个用户中的进程将有效地使用63203
个线程(进程的限制)。因此,这种情况,那么2个用户将有效地用完整个 126406(threads-max)
的大小。
现在,我需要确定用户可以在任何时间点运行的进程数。这可以从文件/etc/security/limits.conf
中确定。因此,此文件中基本上有2个设置,如下所述。
软限制类似于警告,硬限制是实际最大限制。例如,以下内容将阻止学生组中的任何人拥有超过50个进程,并且将在30个进程中发出警告。
@student hard nproc 50
@student soft nproc 30
内核维护硬限制,而shell强制执行软限制。