首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP电子邮件发送CPU密集

PHP电子邮件发送CPU密集
EN

Stack Overflow用户
提问于 2011-12-15 18:57:59
回答 3查看 1.1K关注 0票数 2

我正在运行一个亚马逊EC2 'Large‘实例--带有PHP5和MySQL的UbuntuNattyx64。我们通过CRON执行PHP脚本--使用SMTP/PHPMailer发送电子邮件列表(2000-4000封电子邮件)。

服务器运行非常慢(这些CRON作业中有几个并行运行),它使CPU达到100%。内存使用率很低(仅使用600 in /8G),每个CRON作业占用大量CPU%,例如20-30%,4-5并行运行。

为了找出这个问题,我在MySQL中运行了缓慢的查询日志,但没有引起我的注意。我应该如何缩小CPU使用的原因呢?SMTP/email是CPU强度过大还是意味着存在编程或服务器问题?谢谢!

编辑:问题已解决。有一个小错误(当然)导致电子邮件“增长”(以前的一些电子邮件内容被注入到下一封电子邮件中)--所以邮件预处理变得越来越荒谬了。由此产生的电子邮件有数百/数千个跟踪图像,它们在打开时都同时击中我们的服务器,即gmail中的“显示图像”。在抵御了自己造成的DDoS袭击和两天没有睡眠后,我将享受一瓶摩根船长,同时思考我在生活中所做的各种选择。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-15 20:32:42

导致这种情况的因素(并非详尽无遗的清单):

  1. 使用SMTP服务器的非块IO。
  2. 使用长字符串操作/长文件编码每个循环的php中使用的SMTP库的实现(请记住:必须对协议进行格式化,并且每次通过许多其他方法调用send方法时都会检查/编码该协议)。
  3. 每个邮件有一个(或多个)查询。

尝试测量在循环中执行的每个操作所花费的时间。

可以对调试文件或其他分析工具使用简单的$start = microtime (true)printf (___FILE__.':'.__LINE__.": here after % 0.8f seconds\n", microtime(true) - $start);

尽量减少协议格式/编码时间。

这里不允许超过机器内核的数目,这里是php脚本同时运行的实例。

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 19:05:06

首先,准确地确定哪些程序占用100%的CPU。

如果是PHP解释器,那么代码中就有问题-- SMTP客户端永远无法达到100%的利用率,因为很多时候SMTP服务器将限制它的吞吐量。

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 20:37:07

它可能不仅仅限于php..。是否连接到本地框上的SMTP服务器?你的插座用完了吗?这些请求是否阻碍了他们自己?

通常对于正在做的事情,基于队列的方法通常是最好的。

您是否考虑过使用第三方服务发送邮件,您所做的就是发送API请求?这有几个好处,大多数这些服务都与邮件服务器建立了关系,这样您的电子邮件实际上可以到达收件箱,并且SMTP服务器不会被列入垃圾邮件的黑名单。亚马逊有一个可以做到这一点的服务,像邮戳这样的其他服务也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8525184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档