- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库非常受 cpu 限制,我找不到问题的根本原因。我目前有两个应用程序服务器,每个服务器都有一个 Rails api,通过 ruby-pg gem 连接到 PostgreSQL。两个应用程序服务器也有 sidekiq 运行后台作业,我有一些支持服务器通过 sidekiq 处理来自全国提要的新帖子。如果我的内存不足,解决方案似乎很简单。有什么关于我受 CPU 限制的一般想法吗?
数据库规范:
可能出现的问题:
数据库有近 10GB 的索引。我打算将我的数据库升级到 PostgreSQL 版本 >= 9.2。在 9.2 版中,引入了仅索引扫描。
在 postgresql.conf 中,我将最大连接数设置为“500”。通常全天仅使用 175 个连接,但在高峰时段,sidekiq 任务会将当前连接增加到 350 个。8GB 服务器实例建议使用多少个连接?
当我查看 psql 控制台中的 pg_stat_activity 时,我发现 sidekiq 留下了很多 IDLE 连接。这些连接会导致 CPU 膨胀吗? API 或 sidekiq 中是否存在修复?
也许没有错误。我可能需要简单地增加服务器实例。同样,如果我受限于内存,这会更有意义。但是,应用程序服务器和 3 个支持的 sidekiq 服务器都是 4gb 性能层实例。本质上,与数据库交互的服务器结合了数据库资源的两倍以上。这有关系吗?
其他问题:
最佳答案
您正在使用过多的并发连接。 PostgreSQL 将在管理和处理并发查询上浪费大量时间。所有的并发工作都将争夺 CPU 和缓冲区空间,对自旋锁的竞争会很激烈,而且通常都会一团糟。
在 8 核机器上,如果您主要受 CPU 限制,则您可能不应该有超过 20 个事件连接。如果您的 I/O 受限,您可以更高,但 350 太荒谬了。
如果可能,在您的 PostgreSQL 实例前面放置一个处于事务池模式的 PgBouncer,这样查询就会排队并快速串行执行,而不是缓慢地并行执行。
参见 number of database connections (Pg wiki) .
此外,PostGIS 可能非常占用 CPU。它有时需要做非常复杂的计算。我建议使用 auto_explain
模块来记录长时间运行的查询,并使用 pg_stat_statements
/pg_stat_plans
来记录什么占用了资源。检查这些查询以查看它们是否需要改进。
您的 idle in transaction
session 也必须得到处理。根据它们空闲的原因以及它们是否具有事务 ID,它们可能会导致严重的表膨胀。他们还在 PostgreSQL 中产生了不必要的信号开销,因为它必须与正在积极做事的后端进行更多协调。最后,开放交易的数量本身增加了一些内部管理操作的成本。
所以。如果您减少连接数,将 PgBouncer 置于事务池模式前面,并修复那些空闲连接,您的数据库可能会表现更好。
关于ruby-on-rails - 为什么我的 PostgreSQL 服务器 cpu 受限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672453/
我有一个数据类型是 Monoid 的实例所以我可以得到很好的值(value)观组合: data R a = R String (Maybe (String → a)) instance Monoid
目标:我需要在权限非常有限的 AppDomain 中运行一些代码 - 它应该无法访问任何花哨或不安全的东西,除了少数我在别处定义的辅助方法。 我所做的:我正在创建一个具有所需基本权限的沙箱 AppDo
在我的 VPS 中,我不知道为什么,但是当我对另一个用户执行 su 时,我得到的是: root@deb64:~# su john $ 带选项卡的自动完成不起作用,甚至是命令源。示例: root@deb
我正在寻找一种方法,将二进制代码标记为“受限”,而代码是用swift编写的。 我特别要说的是,将这些标志设置到链接器以防止动态库加载: -Wl,-sectcreate,__RESTRICT,__res
这个问题在这里已经有了答案: Access restriction on class due to restriction on required library rt.jar? (15 个答案)
我正在寻找一个基于Web的JavaScript textarea编辑器,该编辑器支持诸如可选字体,文本颜色,段落对齐等标准功能。但是,有一个相当大的约束:格式应始终应用于所有文本,而不是部分文本。文本
我有以下查询: SELECT pro.* FROM tb_AutProposta pro, tb_AutParcelamento par WHERE pro.id = par.id 但是,想要将
我的问题实际上是一个逻辑问题,任务是将列表截断到 Racket 中的给定长度。也就是说,给定一个列表 (A B C),给定长度为 2,我想要一个新列表 (A B)。限制是我们有可用功能的限制列表,我将
我试图将 jQuery UI DatePicker 限制为仅当前年份,到目前为止它在 This Demo 处工作正常。 我使用以下代码来完成这项工作 $("#datepicker").datepick
我在 minikube 中启用了 podsecuritypolicy。默认情况下,它创建了两个 psp - 特权和受限。 NAME PRIV CAPS SELINUX
我使用 Google Cloud Endpoints 定义了一个简单的 API: @Api(name = "realestate", version = "v1") public class Real
我在Tableau中设计可视化,我的数据在Hive/hadoop中,数据量很大, 当我尝试设计可视化时,查询运行非常非常慢,因为每次它尝试从 hadoop 中提取数据。 所以对于任何可视化,简单的拖放
我已经在这个问题上停留了一段时间。我正在尝试访问我使用 HttpClient 和 Tomcat 7 实现的 ContainerServlet。我不断收到错误消息“Restricted(Containe
由于使用了太多的 Websphere Message Broker 实例或类似的东西,我们刚刚用完了 Linux 机器上的信号量。 我和一位同事想知道为什么这甚至是有限的 - 这只是一点内存,对吧?
我正在尝试复制 boost::variant二维矢量转化为array .使用指令 copy(vectorName.begin(), extentName); .首先我得到错误,因为矢量类型是 vari
我的数据库非常受 cpu 限制,我找不到问题的根本原因。我目前有两个应用程序服务器,每个服务器都有一个 Rails api,通过 ruby-pg gem 连接到 PostgreSQL。两个应用程序
我已经开始学习多核编程和开发并行算法。这可以通过在 Java 中使用多线程轻松完成。因此,我创建了两个包含 10 行内容的文本文件,如下所示: This is the first line in fi
Jinja 的 sandbox Zope 2 RestrictedPython 似乎解决了类似的问题。有没有办法对它们进行分层,即在 Jinja 环境中使用 RestrictedPython 策略?用
我在 Azure VNet 上有一个 HDInsight Hadoop 群集(Linux,单独部署)(使用 NSG 限制客户端 IP)。 Azure SQL 防火墙有一个名为“允许访问 Azure 服
这就是我想要做的:我想使用“_”函数以 gettext 兼容的方式为我的 zmi python 脚本启用 i18n 支持。 这是我到目前为止所做的。在我的 Zope 产品的模块中,我运行: impor
我是一名优秀的程序员,十分优秀!