运行脚本的多个副本-使用核心还是只是降低服务器速度?

运行脚本的多个副本-使用核心还是只是降低服务器速度?

我有一个小巧的 PHP 脚本,用于监控 CentOS 5 服务器上的 beanstalk 消息队列。当它收到消息时,它会开始执行特定操作,完成后,它会返回队列并监听更多工作。

到目前为止,一切都运行良好,没有问题。几天前,一位朋友在一次随机交谈中告诉我,这将是一个理想的脚本,可以利用服务器上的多个核心。这让我想起了 - 好主意!如果我需要运行两个进程,我想我需要两台服务器,但可能不需要。

所以问题是 - 如果我在一台服务器上运行了两份、三份、四份……x 份脚本,这会减慢其他脚本的执行速度,还是不会受到影响?鉴于脚本只是在监听,然后执行操作,然后返回再次监听,是否可能会发生冲突?我认为后者可能更多的是一个编程问题,而不是服务器问题!

答案1

如果这是在 apache 上运行的,使用mpm_prefork(因为它是 php),那么 linux 内核将在多个核心之间平衡子进程。

如果您在命令行上运行它们,那么它们不一定在不同的核心上运行,并且要使它们在不同的核心上运行需要使用tasksetcpuset定义每个实例对不同核心的处理器亲和性。

理论上,运行的脚本数量等于或小于服务器核心数是没问题的,但实际上你仍然需要 CPU 来运行内核和其他软件/守护进程,所以 YMMV。所有这些都受到应用程序类型、连接、对外部软件和网络的依赖性等的影响,因此你必须在自己的基础设施上进行测试以确保万无一失。

答案2

我的理解是这样的:有一个消息队列。PHP 脚本使用来自此队列的消息。所采取的操作因磁盘访问、网络活动和 CPU 密集型任务而异。

(coredump 对如何利用多个进程进行了说明。)

此外,如果某些任务存在延迟(例如通过网络链接进行通信),您甚至可能需要比核心数量更多的脚本。

最终,只有测量才能说明问题。构建一个测试系统,并用真实的消息组合对其进行测试。在哪种系统上进行测试并不重要,只要它确实有多个核心即可。虚拟机就很好;随着消费者数量的增加,您仍然会清楚地感觉到会发生什么。

相关内容