PHP资源释放

标签 php mysql hosting

我的客户在共享服务器上拥有他们的网络托管帐户,但他们的帐户已被暂停,因为“导致严重的服务器过载”。我查看了代码,它是功能性编程的 php,使用了大量数据库查询。我查了一下,大部分都是“SELECT *”。该数据库的表包含 10 行或更多行以及超过 1000 条记录。

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

最佳答案

这实际上取决于您的客户端使用的软件包类型、自定义编码的脚本类型或标准脚本(例如 WordPress)。

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

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

高CPU:非常长的脚本、在每个页面 View 上进行复杂计算的长迭代循环或无限循环(套接字)等。

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

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

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

您应该使用工具在本地对脚本进行性能分析:xDebugPQP ,并找出到底发生了什么。

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

关于PHP资源释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284471/

相关文章:

php - Ajax PHP MySQLI - 获取最后更新的行,但未准备好文档

php - Laravel Eloquent ORM 查询关系内的关系

php - 启动 Google App Engine 网络服务器

mysql - Golang Mysql扫描返回零,当数据存在时?

java - 如何使用 Eclipse 3.6 创建构建

php - Drupal 五星级模块

php - 将数组插入mysql数据库列

javascript - 获取div中元素的id,然后将它们组合成一个整数

c# - 我有一个 C# Windows 窗体应用程序。能不能部署到web上,让用户通过web访问?

google-app-engine - 如何将裸域转发到 www.domain for google app hosted site