我有一个在CloudLinux 6.6 x86_64标准上运行的托pipeVPS。
它有几个网站与MySQL,PHP和Apache与CPanel运行。
我正在开发一个需要pipe理PID并检测其状态的PHP系统。
我在我的MySQL数据库中定义了一个smallint字段(2个字节)来存储PID。
但今天,我注意到一些奇怪的东西:
该服务是“行动起来”,并表示,实际上任务完成后,该过程没有运行。
我查了一下,那里有PID高达997282 (迄今为止最高)的进程。
我试图在Google上看这个, 没有什么能帮助我。
我只find了关于/proc/sys/kernel/pid_max这个文件的信息,我用它来读取它,并从那里得到最大的PID,即1048576 。
这是正常的PID超过65535?
种类无关:当PID达到10000以上时,服务器是否尖叫重启?
你可能需要的任何额外的信息,我愿意提供一个没有泄露秘密的点。
PID被回收。 当一个进程退出时,它的PID可以在以后被另一个进程使用,所以你不会因为接近最大值的PID而“死机”或需要重启。
除非必要,否则我不修改这个sysctl参数。 例如在繁忙的系统上使用大量短命的进程或者大量multithreading的应用程序来处理长时间运行的进程。
通常我设置为99999或在某些情况下 ,999999 …
在一个值得注意的情况下,我有一个数据库服务器用完了进程ID。 平均9,000-10,000个并发数据库连接正在耗尽PID。 每个线程产生了几个线程,达到了在OS中configuration的32,768个限制。 由于高运行队列,这提高了系统负载平均值。
提高PID最大值减轻了压力。
编辑:
如果这是一个VPS,我认为主机将有一个高pid_max值,因为PID在系统上的客人之间共享。 这可能是提供空间。
32位系统的理论最大pid数是32768,而对于64位系统4194304,你可以在你提到的文件( /proc/sys/kernel/pid_max )中定义的文件中定义另一个数值。
如果达到pid_max (通过运行进程),则系统不允许创build新进程,直到现有进程退出并清理。 所以你没有问题,除非你的系统有1048576 正在运行的进程。