2013-03-12 25 views
5

NOT: Aşağıdakilerden herhangi birini silmek istemiyorum, ancak bunun daha önce bir Heroku sorunu olduğunu düşündüğüm, öyle değil. Bu benim yerel makine kıvrılma yoluyla mesajları gönderme ve bir sorun olduğunu düşünüyorum yakut Net :: HTTP Şu anda bazı test verilerini almak için Heroku (ücretsiz) bir raylar uygulamanızda ve sırayla çalışmaya başlıyorum10 İkinci Gecikme Sonrası Önemsiz Önce Önce ipv6 (Ubuntu) nedeniyle POST

her isteği neredeyse tam 10 saniye sürer, nedense

uri = URI.parse("http://SITENAME.herokuapp.com") 
http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Post.new("/users.json") 
request.add_field('Content-Type', 'application/json') 
request.body = {'user' => User.first.to_hash }.to_json 
response = http.request(request) 

: uygulama ben şöyle Heroku uygulamasında bir JSON REST API benim DEV DB'den ve yayınlardan test verilerini alan bir tırmık görev var. Daha sonra üst satırı şu şekilde değiştirdim:

uri = URI.parse("http://localhost:3000") 

... ve istekleri inanılmaz derecede hızlı. Heroku'nun ücretsiz sürümde POSTS'u yavaşlatması durumunda kimse var mı? (İşçi dyno'yu ödemek istedikleri için mantıklı olur) Sonunda ücretli sürüm için pony etmeye devam edeceğim, ancak bunu yapmadan önce DEV'ümde biraz daha ilerlemek istiyorum. Ayrıca, eğer kasıtlı olarak onları yavaşlatmıyorlarsa, yazıların neden bu kadar uzun sürdüğünü bilmeden onları kullanmakta biraz tereddüt ediyorum. 10 saniye süren hat:

response = http.request(request) 

Eminim ki bu açıktı, ama bundan bahsetmiştim.

UPDATE 3/12 Sadece günlüğümden bazı günlükleri göndermek istedim. Ben Yukarıdaki aynı istekte bloğu neden :: HTTP :: Mesaj kütüphanesi değildi 3/15 emin olmak için sadece Net

1400 
Before: 2013-03-12 21:30:33 UTC 
After: 2013-03-12 21:30:43 UTC 
1401 
Before: 2013-03-12 21:30:43 UTC 
After: 2013-03-12 21:30:54 UTC 
1402 
Before: 2013-03-12 21:30:54 UTC 
After: 2013-03-12 21:31:04 UTC 
1403 
Before: 2013-03-12 21:31:04 UTC 
After: 2013-03-12 21:31:14 UTC 
1404 
Before: 2013-03-12 21:31:14 UTC 
After: 2013-03-12 21:31:24 UTC 
1405 
Before: 2013-03-12 21:31:24 UTC 
After: 2013-03-12 21:31:34 UTC 

GÜNCELLEME: isteklerinin tamamı 10 saniyeden uzun sürüyorsa

curl -X POST -H "Content-type: application/json" -d {"params":{"q":"query"} http://SITENAME.herokuapp.com/users.json 

Herkes gecikme oluyor nerede anlatmak için (new_relic hariç) kullanabileceğim bir Heroku hile vardır: Kıvrık ve aynı zamanda 10 saniye sürdü?

GÜNCELLEME 15/03 # 2 Sadece benim Heroku uygulamasında unicorn ve hala Yakut Net :: HTTP :: mesaj hem 10 saniyelik bir gecikme alma ve kabuğundan curl kullanarak geçti. Localhost'a geçiş, posta hemen geri geliyor. 2

Hemen denedik

2013-03-29T03:22:06+00:00 app[web.1]: Started POST "/user.json" for IP 
2013-03-29T03:22:06+00:00 app[web.1]: Parameters: {"user"=>{data}} 
2013-03-29T03:22:06+00:00 app[web.1]: Processing by UserController#create as JSON 
2013-03-29T03:22:06+00:00 app[web.1]: User Load (2.2ms) <<<SQL>>> 
2013-03-29T03:22:06+00:00 app[web.1]: Completed 200 OK in 3ms (Views: 0.1ms | ActiveRecord: 2.2ms) 
2013-03-29T03:22:06+00:00 heroku[router]: at=info method=POST path=/users.json host=HOST.herokuapp.com fwd="66.31.201.99" dyno=web.1 connect=2ms service=33ms status=200 bytes=16 
2013-03-29T03:22:16+00:00 app[web.1]: Started POST "/users.json" for 66.31.201.99 at 2013-03-29 03:22:16 +0000 
2013-03-29T03:22:16+00:00 app[web.1]: Processing by UserController#create as JSON 
2013-03-29T03:22:16+00:00 heroku[router]: at=info method=POST path=/users.json host=HOST.herokuapp.com fwd="66.31.201.99" dyno=web.1 connect=8ms service=19ms status=200 bytes=16 
2013-03-29T03:22:16+00:00 app[web.1]: Parameters: Parameters: {"user"=>{data}} 
2013-03-29T03:22:16+00:00 app[web.1]: User Load (2.0ms) SQL 
2013-03-29T03:22:16+00:00 app[web.1]: Completed 200 OK in 3ms (Views: 0.1ms | ActiveRecord: 2.0ms) 

GÜNCELLEME 28/03 #: son derece hızlı yanıt süreleri ile Heroku günlükleri gönderme son Başına yorum GÜNCELLEME 3/28

, çevrimiçi bir kabuktan kıvrılma: www.compileonline.com/execute_bash_online.php ve hemen geri döndü, bu yüzden makinemde bir şey olduğunu düşünüyorum. Bir kıvrımın nerede yakalandığını nasıl giderebileceğimi bilen var mı?Online kabuğunda 10 saniye lokal ama anlıktır istek biçimi şöyledir:

curl -X POST -H "Content-type: application/json" -d '{"user":"payload"}' http://APP.herokuapp.com/users.json 

GÜNCELLEME 28/03 # benim makinede 3

şey gecikmeye neden oluyor. Ben mevcut sistem saati almak ve daha sonra ayrıntılı modda curl gerçekleştirmek ve 10 saniyelik bir gecikme kıvırmak bile gönderilmeden önce olur üzere aşağıdaki koştum: ...

date +"%T" && curl -X POST -H "Content-type: application/json" -d '{"user":"payload"}' http://APP.herokuapp.com/users.json -v --trace-time -S 

... ve çıkış

00:44:16 [start time from date +"%T"] 
00:44:26.653510 * About to connect() to APP.herokuapp.com port 80 (#0) 
00:44:26.653632 * Trying 184.72.248.52... connected 
00:44:26.675676 > POST /users.json HTTP/1.1 
00:44:26.675676 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
00:44:26.675676 > Host: APP.herokuapp.com 
00:44:26.675676 > Accept: */* 
00:44:26.675676 > Content-type: application/json 
00:44:26.675676 > Content-Length: 653 
00:44:26.675676 > 
00:44:26.675954 * upload completely sent off: 653out of 653 bytes 
00:44:26.717286 < HTTP/1.1 200 OK 
00:44:26.717380 < Cache-Control: max-age=0, private, must-revalidate 
00:44:26.717518 < Content-Type: application/json; charset=utf-8 
00:44:26.717552 < Date: Fri, 29 Mar 2013 04:44:33 GMT 
00:44:26.717584 < Etag: "7363e85fe9edee6f053a4b319588c086" 
00:44:26.717616 < Status: 200 OK 
00:44:26.717647 < X-Rack-Cache: invalidate, pass 
00:44:26.717678 < X-Request-Id: 19ff002048e4e2d5e17a8203576a4194 
00:44:26.717708 < X-Runtime: 0.008901 
00:44:26.717739 < X-Ua-Compatible: IE=Edge,chrome=1 
00:44:26.717771 < transfer-encoding: chunked 
00:44:26.717802 < Connection: keep-alive 
00:44:26.717832 < 
00:44:26.717925 * Connection #0 to host APP.herokuapp.com left intact 
00:44:26.717998 * Closing connection #0 

İlk zaman damgası ve connect() çağrısı arasındaki 10 saniyelik gecikmeyi görebilirsiniz. Zaten ana makineyi çözmemin sorunum kabukta host APP.herokuapp.com yapıp yapmadığını görmeye çalıştım, ancak bu hemen döner.

GÜNCELLEME 3/28 # 4

Ben ipv4 kullanarak zorlar, böylece -4 işaretini ekleme yukarıdaki örneği güncelledik ve benim geliştirme makinede hemen döndürür:

date +"%T" && curl -4 -X POST -H "Content-type: application/json" -d '{"user":"payload"}' http://APP.herokuapp.com/users.json -v --trace-time -S 

Makinemdeki ipv6'yı http://www.upubuntu.com/2011/05/how-to-disable-ipv6-under-ubuntu.html'daki adımları kullanarak devre dışı bırakmayı denedim, ancak hala çalışmıyor. Şimdi sorun, yapmak istediğim isteklerin Net :: HTTP ve HTTParty ile yapılması, bu yüzden IPv6 sayısını sistem çapında düzeltmek istiyorum, bu yüzden kıvrımdaki bu yara bandı bir çözüm değil.

+1

Heroku'da bir uygulama var, POST'ları inanılmaz derecede hızlı bir şekilde kullanıyor, bu yüzden tek dyno'ya programlı istekleri yavaşlattığını hayal ediyorum, böylece bellekte yüklü halde saklayamazsınız – AJcodez

+0

Hiçbir sınırlama yok Heroku. POST işlem yaparken herhangi bir işlem veya veritabanı sorgusu yapıyor musunuz? Ne olup bittiğini anlamak için New Relic gibi bir şey eklemek isteyebilirsiniz: https://addons.heroku.com/newrelic – friism

+0

Evet, POST basit bir DB eklentisi yapar, ancak bu PC'imde 20 ms gibi olur, yani Heroku sunucusunda çok daha uzun sürdüğünü hayal edemiyorum. Bunu teyit etmek için heroku günlüklerini kontrol ettim - çok hızlı bir şekilde geri döndü, bu POST'ların 1400'ünü bugün yaptım ve hepsinin tam olarak 10 saniye sürdüğünü gördüm - bazı giriş kayıtlarının bazıları için yukarıdaki düzeltilmiş postayı görüyorum. –

cevap

0

Heroku'daki günlükler, isteklerinizi işlemek için kullanılan zamanı gösterir? Günlükler, kullanılan zamana göre Heroku (dev ve üretim) üzerinde çalıştığım tüm uygulamalarla doğrudur. Her istek için 10 saniye gösteren heroku günlükleri mi yoksa istemci tarafında bazı zamanlama mekanizmaları mıdır?

Zaman aşımına neden olabilecekleri daraltabileceğinizi görmek için kod yolunun bir kısmını geçici olarak kaldırmayı deneyebilirim. Örneğin, karmaşık görünümleri oluşturmaya çalışmaktan kaçınılabilir, bunun yerine denetleyiciden 200 sağa çevirebilirsiniz. Ardından, kontrol cihazı kodunu yorumlamayı deneyebilirsiniz. Zamanı tüketen şeyi bulana kadar çeşitli parçaları çıkarmaya devam edin.

+0

Gördüğüm 10 saniye, istemci tarafındaki komisyon görevimde bulunan ve heroku siteme POST'leri gönderen günlüklerdeydiler (ve ayrıca curl ve Ruby'nin Net :: HTTP aracılığıyla bir POST yaparken aynı 10 saniyelik tutarlı gecikmeleri görüyorlar). New Relic ve heroku günlükleri, Heroku örneğimde çok hızlı yanıt süreleri gösteriyor. Ben heroku desteği ile konuşacağım. –

+0

Bu, komisyon görevinizin, hizmet kodunuzla ilgili bir şey değil, o zamanın kullanıldığı bir kod yoluna sahip olduğu anlamına gelir. Komisyon görevinizin ne yaptığına daha yakından bakarım. Fazla yardım değil, biliyorum. İyi şanslar. – sorens

+0

Hem curl istekleri hem de Net :: HTTP istekleri bir komisyon görevinde arama yaptığımda olduğu gibi davranıyor. –