编辑(2018 年 6 月 15 日)- 我已经解决了这个问题。这是 Postgres 的问题,有些查询需要超过 15 秒。大多数查询都是针对同一类型的页面,所以我只是删除了它。这就是我所做的 -
- 启用 Postgres 日志记录(我针对超过 3 秒的查询启用了该功能)
- 检查日志文件并找出哪些查询花费的时间更长。有些查询花费了 15 秒。
- 我查看了代码。一个表中没有索引,所以我创建了它。问题是由于一个未优化的查询造成的。由于不需要它,我将其从代码中删除。
我们在 30 GB AWS 实例上使用 Passenger + Apache 运行 Ruby on Rails 应用程序。
尽管 App Postgres DB 有数百万条记录,但数据库大小只有几 GB。现在我发现服务器的使用率一直很高。以下是服务器负载和正在运行的进程。
我该怎么做才能诊断问题或优化服务器?由于只有 20 个用户在线,应用程序会因 CPU 或内存使用率过高而不断崩溃。
以下是命令的输出 -
正常运行时间
特区
顶部
vmstat 10 6
iostat 2
ps -eo'pcpu,%cpu,pid,comm'|grep-v'%CPU PID命令'|sort-n (最后 20 行)
ps -eo'rss,%mem,pcpu,%cpu,pid,comm'|grep-v'%CPU PID命令'|sort-n
答案1
我已经解决了这个问题。这是 Postgres 的问题,有些查询需要超过 15 秒。大多数查询都是针对同一类型的页面,所以我只是删除了它。这就是我所做的 -
启用 Postgres 日志记录(我启用了超过 3 秒的查询)。打开 postgresql.conf 文件并启用日志记录。
sudo vi /etc/postgresql/9.3/main/postgresql.conf
检查日志文件并找出哪些查询耗时较长。
sudo tail -f /var/log/postgresql/postgresql-9.3-main.log
有几个查询需要 15 秒。我查看了代码。一个表中没有索引,所以我创建了它。问题是由于一个未优化的查询造成的。由于不需要它,我刚刚将其从代码中删除。