我有一个令人沮丧的问题。我的web服务有一个email to php模块。简而言之,一旦我的用户向他的专用电子邮件地址发送了一封电子邮件,我的邮件服务器就会捕获该电子邮件,并通过管道将其传送到我的服务器上运行的PHP脚本。这个脚本打开一个MySQL连接并将电子邮件内容保存到数据库。
到目前一切尚好。一旦超过/etc/my.cnf中设置的MySQL连接限制,问题就开始出现。设置为500。如果500个或更多的用户同时发送电子邮件,我的MySQL将无法处理新的连接。
你有什么建议?我应该使用持久的MySQL连接还是任何其他方法,比如将收到的电子邮件内容写入txt文件,然后使用cron作业将其保存到数据库中?
谢谢你的建议!
发布于 2010-07-28 08:12:02
另一个建议是像守护进程一样运行PHP脚本,它只连接到DB一次,并在无限循环中等待输入处理。
发布于 2010-07-28 09:30:10
我在我运行的一个网站上也有类似的功能。设置一个cron,而不是通过管道将电子邮件发送到脚本,在脚本中,您无法控制在给定时间将发送多少电子邮件。这个cron可以根据您的喜好运行。它可以连接到邮件服务器,一次读取任意数量的邮件,并保持与MySQL的单一连接。
当你收到邮件轰炸时,这也会有很大的帮助。
发布于 2010-07-28 21:51:58
如果500个或更多用户同时发送电子邮件,则为
嗯。在计算机系统上“同时”发生两个事件是非常不寻常的,但经常会出现进程重叠的情况。我希望你能从优化电子邮件处理器中获得更多的经验。但您提供的工作原理的细节很少。而不是说这是在什么操作系统上运行的。
我建议您检查CPU或内存是否有过度使用的迹象(注意,您希望有大约80%的内存可用)。如果处理程序为每条消息启动一个PHP实例,那么这将是一个主要的开销--但这不会影响mysql连接打开的时间。
如果可以避免这种情况,请不要使用Blobs/Clobs -将数据转储到diskfile并从数据库引用它。
应用所有常用的性能调整步骤(优化物理存储层-例如RAID、数据库调整)。
整理脚本运行的所有数据库交互,并在一个块中运行它们,并将它们与数据库connect和close语句隔开。
如果你不能同步处理音量,那么...不要重复发明轮子,不要实现自己的消息处理排队系统-将消息直接路由到maildir或邮箱,并运行守护进程来轮询内容并处理它。现成的MDA将比使用PHP高效得多。
结果表明,C.
https://stackoverflow.com/questions/3348937
复制相似问题