2

如果我的网页在完成加载之前反复刷新,那么 MySQL 连接不会关闭,最终当它超过 150 个进程时会抛出“连接过多错误”。

我没有使用持久连接,并且我mysql_close()在脚本末尾有一个,即使我意识到我不需要一个,因为它会关闭。

我怎样才能阻止这种情况发生?我以前从未在我使用过的任何服务器上经历过这种情况。

为了稳定我的网站,我创建了一个 PHP 脚本,每分钟都会杀死超过 120 秒的旧进程。这很有帮助,但当我向我的网站发送更多流量时就没有用了。

4

2 回答 2

2

这看起来像数据库根本无法及时处理所有请求。

当用户访问您的网站时,您的脚本会建立与数据库服务器的连接,执行查询,获取、显示结果,关闭与数据库服务器的连接。

如果进入的查询太多或查询的执行时间过长,则队列会不断增长,直到服务器爆炸。

你说你杀死了旧的进程——那些不是旧的,它们只是还没有完成,请求的网络服务器进程可能已经超时了

你可以做的事情:

  • 优化您的数据库结构
  • 优化您的查询
  • 扩展您的硬件(向上扩展或最好向外扩展)
  • 使用缓存
  • 优化您的服务器设置

最简单且耗时较少但非常有效的改进可能是输出缓存。

您只需保护热门站点的 html 输出并直接传递它,直到缓存过期并刷新缓存。

Nginx 可以为您做到这一点。

http://dangerousprototypes.com/docs/NGINX_reverse_proxy_in_front_of_Apache:_hardened,_high_performance_dedicated_server_setup

如果您提供有关您的网站架构/和您正在使用的软件堆栈的更多信息,我可以为您提供更详细的帮助。

于 2013-01-09T00:09:27.600 回答
0

获取数据后应关闭连接。任何网页都是无状态的,因此它不需要与数据库的持续连接,只需在发生自动回发时打开连接并再次关闭它。将数据存储在数据表容器中,然后对其进行处理。你用什么语言开发网页?

于 2013-01-08T23:23:49.107 回答