【问题标题】:Php resource freeingphp资源释放
【发布时间】:2026-02-15 19:15:01
【问题描述】:

我的客户在共享服务器上拥有他们的虚拟主机帐户,并且他们的帐户已被暂停,因为“导致严重的服务器过载”。我查看了代码,它是功能编程的 php,它使用了大量的数据库查询。我已经看过了,其中大多数是“SELECT *”。此数据库包含 10 行或更多行和 1000 多条记录的表。

我想知道原因是否可能是所有 sql 查询都没有被释放,但我不确定“脚本执行”何时完成。是在函数执行完毕之后,还是整个页面都渲染完毕了?可能是表(结构或记录)的大小吗?有没有人有其他想法?

【问题讨论】:

  • 过载是因为磁盘、cpu 还是内存?
  • 托管公司应该告诉您“导致严重的服务器过载”的确切含义...

标签: php mysql hosting


【解决方案1】:

这实际上取决于您的客户使用的软件包类型、自定义编码的脚本类型或 wordpress 等标准脚本。

导致严重的服务器过载 - 可能是多种原因:

高内存使用:该脚本未使用单例模型或将大量数据分配给数组、变量或包含大量文件。基本上是糟糕的设计和代码气味。

高 CPU: 非常长的脚本、长的迭代循环,其间有复杂的计算或无限循环(套接字)等在每个页面视图上。

高网络流量: Screen Scappers,例如从其他网站请求大量流量的爬虫,或者基本上是抓取外部内容的脚本,或者类似于 torrent 跟踪器。

高磁盘使用率:不断轰炸服务器 IO 堆栈(不断写入和读取磁盘)

包含大量数据库查询的脚本可能会陷入:高磁盘使用率(读取)+高内存使用率(迭代结果)+高 CPU(对结果进行处理))

您应该使用工具在本地对脚本进行性能分析:xDebugPQP,并找出真正发生的事情。

如果您的客户对那里的网站很认真,那么他们应该投资 VPS。

【讨论】:

    【解决方案2】:

    确保正确关闭 SQL 连接。如果您一次执行大量查询,则将连接保持打开更长时间可能会更有效。或者,如果您在每次查询后没有关闭它们,可以尝试这样做。我必须说 10 个表并不算多,如果这会使共享服务器超载,我会感到惊讶吗?

    【讨论】:

    • @Lawrence Cherone 每个脚本有多少查询?如果有很多,这可能很好。如果不尝试在每次查询后关闭连接,看看是否有帮助。长时间打开未使用的连接会占用主机上的大量资源。
    • @LawrenceCherone check this out
    • @LawrenceCherone 请注意,创建表的索引也会提高性能
    • 只有 mysql_pconnect 连接在脚本完成后保持打开状态,来自 mysql_connect 手册The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().