打开了太多的httpd进程

所以我已经阅读了所有与我的问题有关的问题,但是找不到任何帮助。

背景:我有一个服务于其他网站的应用程序(网站),并为网站添加了一些HTML,每个网站都对我的服务器进行简单的AJAX调用,当页面加载时,有时可能会发送5-如果他们在该页面上有几个我的HTML,那么每个网页的请求数为10。

老问题:现在我有大约800个网站,每次页面加载它发送一个AJAX请求到我的服务器(非常简单的请求 – TTLB = 500毫秒),但我收到了很多,你可以明白,每一秒我得到10-40个请求。 似乎没有太多,但我的服务器开始挣扎,没有任何东西,我有EC2 t2大,我的CPU使用率可以达到60%,在高峰时间和以上。

解决scheme:我已经修复了代码,它现在只发送1个AJAX请求,每分钟最less发送一次,每1分钟从1个IP获得1个请求,比从1个IP刷新每个页面5-10个好很多。

新问题:如果网站在我的应用程序中更改设置,只能得到新的代码,电子邮件将很快发送,但直到比(不是每个人都有固定的代码),我需要假设我没有解决这个问题,但不会变得更糟(或者变得更糟糕)。

我试过的:看了top命令之后,我发现这个过程看起来好像什么也没有做,闲着大约1分钟,然后被删除,我知道这个脚本大约需要500ms才能完成(甚至更less)当进程闲置时,每个进程的CPU使用率为0.3%,当你有20-50个进程(其中一些实际上正在做的东西,而不是占用2-7%的CPU),这是很多,所以我做了这个AJAX返回的结尾:

 header('Connection: close'); header('Content-Length: '.ob_get_length()); ob_end_flush(); ob_flush(); flush(); $cpid = posix_getpid(); $result = posix_kill($cpid, 9); 

我发送我的回应,并删除了PHP脚本运行的过程中,我的CPU下降到18%,同时达到60%,仍然是18%,不低于10%,所以我认为一切都是仍然完成,没有太多的这些AJAX请求的进程。

但事实并非如此,我很高兴,我testing了我的应用程序,发现有些代码没有运行(更长的代码发送http请求并在文件中做事),我没有testing它,删除上面的代码块和问题消失了,所以我假设每个进程都不处理单个请求,所以我不能立即杀死这个进程。

我的想法是:我可以尝试使用configuration并设置进程,以便每个进程都可以处理单个连接,或者我可以设置less量的最大进程来打开,并且不会打开太多的进程,这些testing中的一些将帮助我,并且会解决我的问题,但是从长远来看,这也可能会伤害我,或者我不会考虑这个问题。

我知道这是不理想的玩这些configuration,但它看起来像我没有任何更好的主意(除了升级我的服务器,但它看起来像我不需要浪费钱)。

我该怎么办? 你知道更好的解决scheme吗? 我的一个想法会起作用吗?

我不知道我需要分享什么信息,但让我知道,所以我可以发布。