Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Heroku上偶尔出现的Rack::Timeout::RequestTimeoutException_Ruby On Rails_Postgresql_Heroku - Fatal编程技术网

Ruby on rails Heroku上偶尔出现的Rack::Timeout::RequestTimeoutException

Ruby on rails Heroku上偶尔出现的Rack::Timeout::RequestTimeoutException,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我注意到有1-5分钟的时间段,其中1-20%的请求会产生Rack::Timeout::RequestTimeoutException。这大约每两个小时发生一次。这里没有n+1查询,而且AFAIK中也没有任何缺少的索引。我们使用的是标准7 Postgres,内存为120GB,连接尚未达到最大值。还有什么其他的事情我可以窥探一下,看看问题是什么?谢谢 下面是一个请求队列时间峰值的示例 日志样本: source=DATABASE sample#current_transaction=160483065

我注意到有1-5分钟的时间段,其中1-20%的请求会产生
Rack::Timeout::RequestTimeoutException
。这大约每两个小时发生一次。这里没有n+1查询,而且AFAIK中也没有任何缺少的索引。我们使用的是标准7 Postgres,内存为120GB,连接尚未达到最大值。还有什么其他的事情我可以窥探一下,看看问题是什么?谢谢

下面是一个请求队列时间峰值的示例

日志样本:

source=DATABASE
sample#current_transaction=160483065.0
sample#db_size=35361812244.0bytes
sample#tables=29
sample#active-connections=60
sample#waiting-connections=0
sample#index-cache-hit-rate=0.99897
sample#table-cache-hit-rate=0.99893
sample#load-avg-1m=0.07375
sample#load-avg-5m=0.06
sample#load-avg-15m=0.05375
sample#read-iops=0
sample#write-iops=0
sample#memory-total=125650852.0kB
sample#memory-free=75423472.0kB
sample#memory-cached=46423528.0kB
sample#memory-postgres=485000.0kB

我假设您正在运行多个web动态对象,而没有工作动态对象。您使用的是一台经过优化的unicorn/Goliath服务器,可以为多个并发连接提供服务

你看不到Postgres或ruby spikes。你看到的是排队尖峰。没有看到您的实际设置。你可能是随机选择算法的受害者

您是否有任何长时间运行的任务可以推给后台工作人员?其他请求可能正在后面运行。或者是否有一个请求挂起,导致其背后的任何内容超时。这些可能很难在日志中发现

上面文章中概述的一些解决方案。在请求上添加硬超时。强制终止任何长时间运行的请求。这将使您的日志更好地显示任何错误的确切位置,而不仅仅是连锁效应

根据采样率,你所拥有的图形有时很难解释,尤其是在不深入研究dyno本身的相关图形的情况下。查看每个dyno的指标

其他一些可能会在你没有注意到的情况下阻碍员工的事情

DNS查询。你如何查找你的主机名?对于外部服务/数据库实例等,这可能很难发现,并且可能会显示在图的ruby部分下。所以这可能不是问题所在


连接池。在这种情况下似乎不太可能,因为您已经排除了这种可能性。但请检查工作进程的数量与可用的连接数

请包括(1)DB主机上的CPU使用情况,(2)DB WAL和数据所在磁盘的延迟/IO队列。我不确定是否可以获取该数据。这似乎是从Heroku Postgres中提取出来的。我刚刚上传了日志样本,但是它们看起来并不寻常。heroku pg:diagnose--app的输出是什么?
红色:命中率姓名比率---------------------------------------------------------------------public.tracks 0.9678830033375656绿色:连接计数绿色:长查询绿色:事务中空闲绿色:膨胀绿色:阻塞查询绿色:序列绿色:加载
您正在运行多少动态节点?