我们需要处理大量的域名,因此需要尽快完成。由于HTTP请求很慢(即如果没有网站在该域上,则可能超时),因此我同时运行多个脚本,并从数据库中的域列表中提供输入。
问题在于,在一段时间内(几个小时到24小时),所有脚本都开始变慢,而ps -al显示它们正在睡眠。
服务器非常强大(8核,72GB RAM,6TB Raid 6等等,80MB 2:1连接),且永远不会达到最大值,即Free -m显示。
-/+ buffers/cache: 61157 11337
Swap: 4510 195 4315
顶部显示空闲率在80-90%之间
sar -d显示平均5.3%的利用率
更有趣的是,iptraf从大约50-60MB / s开始,经过约4个小时后结束为8-10MB / s。
我目前在每个服务器上运行约500个版本的脚本(2个服务器),它们都显示相同的问题。
ps -al
显示大多数Python脚本正在睡眠,我不明白为什么
例如:
0 S 0 28668 2987 0 80 0 - 71003 sk_wai pts/2 00:00:03 python
0 S 0 28669 2987 0 80 0 - 71619 inet_s pts/2 00:00:31 python
0 S 0 28670 2987 0 80 0 - 70947 sk_wai pts/2 00:00:07 python
0 S 0 28671 2987 0 80 0 - 71609 poll_s pts/2 00:00:29 python
0 S 0 28672 2987 0 80 0 - 71944 poll_s pts/2 00:00:31 python
0 S 0 28673 2987 0 80 0 - 71606 poll_s pts/2 00:00:26 python
0 S 0 28674 2987 0 80 0 - 71425 poll_s pts/2 00:00:20 python
0 S 0 28675 2987 0 80 0 - 70964 sk_wai pts/2 00:00:01 python
0 S 0 28676 2987 0 80 0 - 71205 inet_s pts/2 00:00:19 python
0 S 0 28677 2987 0 80 0 - 71610 inet_s pts/2 00:00:21 python
0 S 0 28678 2987 0 80 0 - 71491 inet_s pts/2 00:00:22 python
在执行的脚本中没有睡眠状态,所以我不明白为什么ps -al显示大部分进程处于睡眠状态,也不明白为什么它们随着时间的推移会变得越来越慢,IP请求次数越来越少,当CPU、内存、磁盘访问和带宽都充足时。如果有人能帮忙解决问题,我将非常感激。
编辑:
由于我在整个代码中使用了异常来捕获有关域的诊断信息,即我无法连接的原因,因此代码非常大。如果需要,我可以在其他地方发布代码,但是通过HTTPLib和URLLib进行的基本调用直接从Python示例中获取。
更多信息:
quota -u mysql quota -u root
两者都没有返回任何内容
nlimit -n 返回1024 已将limit.conf更改为允许mysql允许16000个软连接和硬连接,并且已经能够运行超过2000个脚本,但仍然存在问题。
一些进展:
好吧,我已经更改了用户的所有限制,确保关闭了所有套接字(它们没有),虽然情况有所改善,但仍然存在减速问题,尽管不是很严重。
有趣的是,我还注意到了一些内存泄漏 - 脚本运行的时间越长,它们使用的内存就越多,但我不确定是什么原因导致了这种情况。 我将输出数据存储在一个字符串中,然后在每次迭代之后将其打印到终端上。我确实在最后清除了该字符串,但是终端是否存储了所有输出,从而导致内存不断增加?
编辑:不是这个原因-运行了30个脚本而没有输出到终端,但仍然存在泄漏问题。 我没有使用任何复杂的东西(只是字符串、HTTPLib和URLLib),想知道Python MySQL连接器是否存在任何问题...?