【问题标题】:Detecting server overload to limit mysql queries检测服务器过载以限制 mysql 查询
【发布时间】:2013-02-22 00:00:05
【问题描述】:

我正在编写 c++ 服务,它每隔 1 秒在 mysql 服务器上使用 LIMIT 1 进行 SELECT 查询,计算然后进行 INSERT,并且这个循环永远永远。

我想检测服务器过载以使 SELECT 具有更大的 LIMIT,例如 LIMIT 10 和更大的 inetrvals,例如每 5 秒左右。不确定我的解决方案是否会减轻服务器过载。

我的问题是如何检测这些重载,我不确定我所说的重载是什么意思 :) 它可以是任何东西,但我的应用程序是 php(聊天)中的 Web 应用程序,因此可以在 Apache2 端检测到重载,或者mysql 端,或检测有多少用户在时间间隔内进行了多少输入(聊天消息)。我不知道:/

谢谢!

编辑: 好的,我用我的 C++ 应用程序制作了一个套接字服务器,而且它真的很快。现在我正在努力解决内存泄漏问题,但那是另一回事了。

非常感谢 @brianbeuning 对我的问题提出有益的想法。

【问题讨论】:

  • 像你这样的投票设计通常不是很好。您想找到某种方法使其成为事件驱动的。从套接字读取或读取 MSMQ 队列是事件驱动的。
  • @brianbeuning 你能帮我导航到一些关于 c++ 套接字服务器和 php 客户端通信的教程吗?
  • 服务器套接字将使用 socket()、bind()、listen() 和 accept() 来设置用于连接的套接字。以及 select()、read() 和 write() 来处理请求。客户端将使用 socket()、connect()、write()、read() 和 close()。

标签: php c++ mysql service apache2


【解决方案1】:

最好解决这个永远循环的问题,这不是个好主意。

如果确实必须使用该循环,则使用一些缓存技术。

为了检测“过载”(我称之为 MySQL CPU 使用率高),请尝试调用操作系统支持的外部命令。

例如,如果您在 Linux 上使用它,请使用 ps 命令。


编辑:

我现在意识到您正在编写聊天服务器。 使用 MySQL 作为中间人并不是一个好主意。 尝试在不使用 MySQL 的情况下解决此问题,然后如果您需要保存聊天记录,请偶尔将其保存到 MySQL(例如,每 10 秒左右)。

我敢打赌,现在只有 20 个密集型用户会占用 CPU。

尝试直接进行客户端到客户端的通信,而不需要服务器(仅使用服务器在 2 个客户端之间建立通信)。

【讨论】:

  • 循环是必须的,我必须尽快处理并实时处理所有文本。 apache有什么模块吗?我有时在 linux 上运行这个过程,有时也在 Windows 上运行。谢谢
  • 即使存在,我也不知道。
  • 试试 memcached。跳过 MySQL 部分。
  • 现在我在考虑 memcached。
  • 现在我正在考虑通过 Thrift 将 C++ 应用程序与 PHP 应用程序连接起来。上面提到的@brianbeuning 它的事件驱动方法。但我正在努力寻找在 Windows 上工作的功能齐全的示例:/
【解决方案2】:

另一种方法是在您的应用中缓冲数据并使用各种连接池来管理负载。保留需要插入的数据的滚动缓冲区,并根据缓冲区的大小管理“限制”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多