【问题标题】:Low Requests per second with Catalyst perl MVC frameworkCatalyst perl MVC 框架的每秒低请求数
【发布时间】:2014-11-06 04:48:29
【问题描述】:

我是网络应用程序开发的新手,我不知道对于动态网站来说,多少 RPS(每秒请求数)是正常的,但我认为我的应用程序非常慢。

我现在正在编写 Catalyst::Manual::Tutorial 的第 4 部分,现在我有大约 45 RPS 用于从 DB 读取 5-10 个条目,而只有大约 3-5 RPS 用于更新/创建/删除 DB 中的数据.我正在使用教程中提到的所有工具,即 SQLite3、Catalyst 5.90075 和 linux 上的 perl 5.18。在 DB 中,我有 2 个包含数据的表(作者和书籍)和 1 个链接表(author_book),我的硬盘速度 ~120MiB/s 用于读/写和核心 i5 英特尔处理器。

我的应用中有 2 个控制器、1 个模型和 4 个链式操作,并使用开发服务器(试用 Starman,结果完全相同,暂时不要使用 Apache 尝试 perl_mod)。假设我做错了什么......有人可以帮助提高性能吗?

【问题讨论】:

  • 你检查内存了吗?它会交换吗?
  • 不,我根本没有交换。我有 4 GiB 的 RAM。开发服务器需要约 100MiB 和 Starman,具体取决于工人数量
  • 我建议您在分析器上运行它并查看花费的时间。见slideshare.net/Tim.Bunce/nyt-prof-201406key
  • 当涉及数据库时,这些时间听起来很典型。当它是平面数据或缓存数据时,我得到了 250+。您可以并且应该运行多个进程(受 RAM 限制),从而增加有效 RPS。 uWSGI 几乎在各个方面都比 Starman 好,并且可以很好地与 .psgi 和 Catalyst 配合使用。
  • 好的,我发现 Catalyst(默认情况下)使用 DBIx 的方式是为每个条目创建 1 个 SELECT,而不是为所有条目创建 1 个 SELECT。但是为什么它被选为默认行为呢?每个 SELECT 的成本约为 2.2 毫秒(来自 NYTProf 的信息,最昂贵的是 sub DBIx::Class::Storage::DBIHacks::_resolve_aliastypes_from_select_args),并且像 Catalyst 那样做这些事情非常昂贵......在 INSERT 的情况下最昂贵的是 DBI::st:execute(xsub) 并假设没有办法改善这一点(在插入的情况下)......非常感谢 NYTProf,非常好的工具

标签: performance perl catalyst


【解决方案1】:

您应该将Catalyst::Stats 添加到您的项目中,并获取代码不同部分的持续时间。这将有助于找出瓶颈是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2011-03-07
    • 2012-06-23
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多