From tils at tils.net Tue Feb 1 15:48:38 2011 From: tils at tils.net (Tilmann Singer) Date: Tue, 01 Feb 2011 21:48:38 +0100 Subject: Multiple master processes In-Reply-To: <20110131180815.GA17643@dcvr.yhbt.net> References: <87ei7te76x.wl%tils@tils.net> <20110131180815.GA17643@dcvr.yhbt.net> Message-ID: <87aaiftra1.wl%tils@tils.net> At Mon, 31 Jan 2011 18:08:15 +0000, Eric Wong wrote: > > Tilmann Singer wrote: > > I'm seeing the following output of ps after starting unicorn, which as > > I understand it means that there are multiple master processes > > running, each with its own pid. Is that normal behaviour or is there > > something wrong with my setup? > > It's normal behavior for Linux 2.4.x + Ruby 1.9, don't worry about it. OK thanks, good to know. > > $ ps xf|grep 4002 > > 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D > > 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > > 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D [...] > > $ cat tmp/pids/unicorn.pid > > 8022 Could it be that the content of the pidfile is wrong in this case? I found that I always have to signal the pid of the last of the master process list entries (26743 in this example) to see them have an effect. Not a big deal, just wondering. > Wow, I didn't realize people ran the latest Rubies on 2.4.x! Time to upgrade for me I assume ... greetings, Til From normalperson at yhbt.net Tue Feb 1 16:22:40 2011 From: normalperson at yhbt.net (Eric Wong) Date: Tue, 1 Feb 2011 13:22:40 -0800 Subject: Multiple master processes In-Reply-To: <87aaiftra1.wl%tils@tils.net> References: <87ei7te76x.wl%tils@tils.net> <20110131180815.GA17643@dcvr.yhbt.net> <87aaiftra1.wl%tils@tils.net> Message-ID: <20110201212240.GA3916@dcvr.yhbt.net> Tilmann Singer wrote: > > > $ ps xf|grep 4002 > > > 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D > > > 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > > > 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > [...] > > > $ cat tmp/pids/unicorn.pid > > > 8022 > > Could it be that the content of the pidfile is wrong in this case? I > found that I always have to signal the pid of the last of the master > process list entries (26743 in this example) to see them have an > effect. Not a big deal, just wondering. Probably, I don't think there's a reliable way to get the pid dedicated to signal handling with LinuxThreads... > > Wow, I didn't realize people ran the latest Rubies on 2.4.x! > > Time to upgrade for me I assume ... Definitely, especially since you're using Ruby 1.9.2 :) -- Eric Wong From normalperson at yhbt.net Fri Feb 4 16:33:41 2011 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 4 Feb 2011 21:33:41 +0000 Subject: [ANN] unicorn 3.4.0 - for people with very big LANs Message-ID: <20110204213341.GB3823@dcvr.yhbt.net> Changes: * IPv6 support in the HTTP hostname parser and configuration language. Configurator syntax for "listen" addresses should be the same as nginx. Even though we support IPv6, we will never support non-LAN/localhost clients connecting to Unicorn. * TCP_NOPUSH/TCP_CORK is enabled by default to optimize for bandwidth usage and avoid unnecessary wakeups in nginx. * Updated KNOWN_ISSUES document for bugs in recent Ruby 1.8.7 (RNG needs reset after fork) and nginx+sendfile()+FreeBSD 8. * examples/nginx.conf updated for modern stable versions of nginx. * "Status" in headers no longer ignored in the response, Rack::Lint already enforces this so we don't duplicate the work. * All tests pass under Ruby 1.9.3dev * various bugfixes in the (mostly unused) ExecCGI class that powers http://bogomips.org/unicorn.git * http://unicorn.bogomips.org/ * mongrel-unicorn at rubyforge.org * git://bogomips.org/unicorn.git -- Eric Wong From list at mrtech.ru Sun Feb 6 09:03:15 2011 From: list at mrtech.ru (Troex Nevelin) Date: Sun, 06 Feb 2011 17:03:15 +0300 Subject: Request queue length Message-ID: <4D4EAA23.2050802@mrtech.ru> Is there a way to get the number of requests that are currently awaiting to be executed by my rails app by unicorn? Or there is no queue in unicorn and I should look for this information somewhere in nginx or other front-end server? Couldn't find much information about this topic, so decided to ask here first. From normalperson at yhbt.net Sun Feb 6 14:02:35 2011 From: normalperson at yhbt.net (Eric Wong) Date: Sun, 6 Feb 2011 19:02:35 +0000 Subject: Request queue length In-Reply-To: <4D4EAA23.2050802@mrtech.ru> References: <4D4EAA23.2050802@mrtech.ru> Message-ID: <20110206190235.GA8794@dcvr.yhbt.net> Troex Nevelin wrote: > Is there a way to get the number of requests that are currently awaiting > to be executed by my rails app by unicorn? > > Or there is no queue in unicorn and I should look for this information > somewhere in nginx or other front-end server? The queue is in the kernel and controlled by the listen(2) syscall. If you're in Linux, you can inspect this with Raindrops[1] or just read the output of ss(8) or /proc/net/tcp. I don't know how to do this in non-Linux kernels. All TCP servers actually have this queue, so you can use ss(8), /proc/net/tcp or raindrops to inspect this queue in nginx, too. [1] http://raindrops.bogomips.org/ I've found this example surprisingly useful, too: http://raindrops.bogomips.org/examples/linux-tcp-listener-stats.rb -- Eric Wong From list at mrtech.ru Fri Feb 11 14:52:54 2011 From: list at mrtech.ru (Troex Nevelin) Date: Fri, 11 Feb 2011 22:52:54 +0300 Subject: Request queue length In-Reply-To: <20110206190235.GA8794@dcvr.yhbt.net> References: <4D4EAA23.2050802@mrtech.ru> <20110206190235.GA8794@dcvr.yhbt.net> Message-ID: <4D559396.3070109@mrtech.ru> On 02/06/2011 10:02 PM, Eric Wong wrote: > [1] http://raindrops.bogomips.org/ > I've found this example surprisingly useful, too: > http://raindrops.bogomips.org/examples/linux-tcp-listener-stats.rb Thank a lot for this link, I also found a lot of interesting. I'm currently using thin (rails2.3 on ruby1.8), but thinking to try unicorn on next update. I was monitoring nginx and thin using raindrops: Nginx: # ./linux-tcp-listener-stats.rb -d 1 80.93.53.99:80 address active queued 80.93.53.99:80 929 0 80.93.53.99:80 984 0 80.93.53.99:80 978 0 80.93.53.99:80 941 0 Nginx is almost always shows that all sockets are active (~1000) and queued sometimes I can see 1 or 2. As I understand that means that nginx is fast and works well. Thin: # ./linux-tcp-listener-stats.rb -d 1 10.0.0.1:4000 address active queued 10.0.0.1:4000 21 8 10.0.0.1:4000 21 9 10.0.0.1:4000 21 10 10.0.0.1:4000 23 0 10.0.0.1:4000 1 0 10.0.0.1:4000 0 0 10.0.0.1:4000 2 0 What can you say about these numbers? Actually I don't understand the 'active' table. As I thought thin or unicorn can serv only one request at a time because ruby/rails works like forks, so what means this 'active'? From normalperson at yhbt.net Fri Feb 11 16:20:36 2011 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 11 Feb 2011 13:20:36 -0800 Subject: Request queue length In-Reply-To: <4D559396.3070109@mrtech.ru> References: <4D4EAA23.2050802@mrtech.ru> <20110206190235.GA8794@dcvr.yhbt.net> <4D559396.3070109@mrtech.ru> Message-ID: <20110211212036.GA26634@dcvr.yhbt.net> Troex Nevelin wrote: > On 02/06/2011 10:02 PM, Eric Wong wrote: >> [1] http://raindrops.bogomips.org/ >> I've found this example surprisingly useful, too: >> http://raindrops.bogomips.org/examples/linux-tcp-listener-stats.rb > > Thank a lot for this link, I also found a lot of interesting. I'm > currently using thin (rails2.3 on ruby1.8), but thinking to try unicorn > on next update. > I was monitoring nginx and thin using raindrops: > > Nginx: > # ./linux-tcp-listener-stats.rb -d 1 80.93.53.99:80 > address active queued > 80.93.53.99:80 929 0 > 80.93.53.99:80 984 0 > 80.93.53.99:80 978 0 > 80.93.53.99:80 941 0 > > Nginx is almost always shows that all sockets are active (~1000) and > queued sometimes I can see 1 or 2. As I understand that means that nginx > is fast and works well. Yep, nginx does its job very well. > Thin: > # ./linux-tcp-listener-stats.rb -d 1 10.0.0.1:4000 > address active queued > 10.0.0.1:4000 21 8 > 10.0.0.1:4000 21 9 > 10.0.0.1:4000 21 10 > 10.0.0.1:4000 23 0 > 10.0.0.1:4000 1 0 > 10.0.0.1:4000 0 0 > 10.0.0.1:4000 2 0 > > What can you say about these numbers? Actually I don't understand the > 'active' table. As I thought thin or unicorn can serv only one request > at a time because ruby/rails works like forks, so what means this > 'active'? Thin can hold multiple connections open in a single process (idle or doing I/O), but only execute the Rack app for one client at a time (unless you're using the non-standard "app.deferred?" stuff). With Unicorn, you'll still see multiple active because all the worker processes share the same listener socket, but the active numbers will be smaller and capped at the number of worker processes you have. The queue is likely to be smaller if you're running multiple workers, too. -- Eric Wong From list at mrtech.ru Sat Feb 12 10:58:35 2011 From: list at mrtech.ru (Troex Nevelin) Date: Sat, 12 Feb 2011 18:58:35 +0300 Subject: Request queue length In-Reply-To: <20110211212036.GA26634@dcvr.yhbt.net> References: <4D4EAA23.2050802@mrtech.ru> <20110206190235.GA8794@dcvr.yhbt.net> <4D559396.3070109@mrtech.ru> <20110211212036.GA26634@dcvr.yhbt.net> Message-ID: <4D56AE2B.1040107@mrtech.ru> On 02/12/2011 12:20 AM, Eric Wong wrote: > Thin can hold multiple connections open in a single process (idle or > doing I/O), but only execute the Rack app for one client at a time > (unless you're using the non-standard "app.deferred?" stuff). No I'm using any deferred stuff, I have delayed_job but this is other story. > With Unicorn, you'll still see multiple active because all the worker > processes share the same listener socket, but the active numbers > will be smaller and capped at the number of worker processes you have. > The queue is likely to be smaller if you're running multiple workers, > too. Currently I use thin 10 instances and pass 10 sockets to nginx. I forgot that unicorn uses only one socket to communicate with frontend :) What I really want to track with unicorn is to see how many clients are really waiting in queue. I hope if I ran 10 unicorn instances and monitor socket during peak load I'll see 10 active and the queue will be the real queue :) As you showed me above that thin can take requests 'on hold' and that is why I didn't understand the active number bigger than 1 with thin. I'll post the results here, when I migrate to unicorn. From bunderwood at rbmtechnologies.com Wed Feb 16 08:06:36 2011 From: bunderwood at rbmtechnologies.com (Brian Underwood) Date: Wed, 16 Feb 2011 08:06:36 -0500 Subject: Forking for background processing with rails/unicorn Message-ID: Hello, I've been working for a few days on a problem which, after tracking it down, seems to be related to unicorn. I'm hoping that somebody might be able to help with information about what's going on. In the Rails 3 application that I support, we sometimes fork during a web request in order to do background processing behind the scenes without the user (and the browser connection) to wait for it to finish. I realize that a better method would be to have a queue of jobs to be processed (I even created a gem called job_boss which works well for our case), but it will take us a while to get there, so I'm trying to fix this for now. The problem that I'm finding is that, when I fork, the HTTP connection doesn't close. IE doesn't handle this as well and the browser is left sitting, waiting for the child process to finish rather than being redirected. This functionality worked fine in our application when we were using Rails 2.3.5 and Unicorn 1.1.3, but broke when we moved to Rails 3 and Unicorn 3.0.0 (we've since moved to Unicorn 3.4.0 and the problem remains, I had some hope that Unicorn 3.3.1 might have addressed it). I've been able to solve this problem temporarily by closing two file descriptors manually (#3 and, depending on the version of Rails #6 or #7). Obviously this is not ideal. I found the UNICORN_FD environment variable when looking through the Unicorn source, but that only seems to indicate #3. Where might #6/#7 be coming from? Is there some way that I can determine these without hard-coding the FD #? Any help that you can provide would be greatly appreciated, Brian Underwood Software Systems Engineer RBM Technologies, Inc. 215 1st St? ?? Cambridge, MA 02142 call? (617) 401-4666 visit www.rbmtechnologies.com The Power Behind the Planogram? "This email and any of its attachments may contain proprietary information, which is privileged, confidential, or subject to copyrights belonging to RBM Technologies, Inc. This email is intended solely for the use of the individual or entity to which it is addressed. If you are not the intended recipient of this email, you are hereby notified that any dissemination, distribution, copying, or action taken in relation to the contents of and attachments to this is strictly prohibited and may be unlawful. If you have received this email in error, please notify the sender immediately and permanently delete the original and any copy of this email and any printout. Thank you." From normalperson at yhbt.net Wed Feb 16 12:41:43 2011 From: normalperson at yhbt.net (Eric Wong) Date: Wed, 16 Feb 2011 09:41:43 -0800 Subject: Forking for background processing with rails/unicorn In-Reply-To: References: Message-ID: <20110216174143.GA8070@dcvr.yhbt.net> Brian Underwood wrote: > In the Rails 3 application that I support, we sometimes fork during a > web request in order to do background processing behind the scenes > without the user (and the browser connection) to wait for it to > finish. I realize that a better method would be to have a queue of > jobs to be processed (I even created a gem called job_boss which works > well for our case), but it will take us a while to get there, so I'm > trying to fix this for now. > > The problem that I'm finding is that, when I fork, the HTTP connection > doesn't close. IE doesn't handle this as well and the browser is left > sitting, waiting for the child process to finish rather than being > redirected. This functionality worked fine in our application when we > were using Rails 2.3.5 and Unicorn 1.1.3, but broke when we moved to > Rails 3 and Unicorn 3.0.0 (we've since moved to Unicorn 3.4.0 and the > problem remains, I had some hope that Unicorn 3.3.1 might have > addressed it). I'm not able to reproduce any difference between 1.x and 3.x in this regard in forking behavior. I know that the client socket is never closed on fork by default, so there's probably something else in your app that changed... > I've been able to solve this problem temporarily by closing two file > descriptors manually (#3 and, depending on the version of Rails #6 or > #7). Obviously this is not ideal. I found the UNICORN_FD environment > variable when looking through the Unicorn source, but that only seems > to indicate #3. Where might #6/#7 be coming from? Whatever is in UNICORN_FD is the listener socket (probably 3), so 6/7 is probably the client socket, but you should normally close everything in the forked child for background processing. The IO.closefrom method in the io-extra[1] gem will get everything including descriptors opened without a corresponding Ruby object. If you know everything uses Ruby IO, then walking ObjectSpace works, too: # close everything except stdin, stdout and stderr ObjectSpace.each_object(IO) { |s| begin s.close if s.fileno > 2 rescue IOError, Errno::EBADF # EBADF can come from duplicate IOs due to FD inheritance end } > Is there some way > that I can determine these without hard-coding the FD #? lsof or scanning /proc/$$/fd (Linux), but if you have any open socket connections (memcached/activerecord/net-http-persistent/etc...), you should close all of those and restart them if necessary in the child. [1] http://rubyforge.org/projects/shards -- Eric Wong From normalperson at yhbt.net Wed Feb 16 14:11:03 2011 From: normalperson at yhbt.net (Eric Wong) Date: Wed, 16 Feb 2011 11:11:03 -0800 Subject: license is NOT changing Message-ID: <20110216191103.GA16505@dcvr.yhbt.net> Since Ruby 1.9.3dev is under the 2-clause BSD License (+ extra terms) now, I've clarified Unicorn will be remaining under the same terms as Ruby 1.8 and Mongrel 1.1.5[1]. I have zero interest (nor rights to relicense) the code in Unicorn to a BSD license. For the record, I'm personally a huge fan and proponent of the GPL, but again I can't relicense existing code without the permission of everybody that ever contributed to Mongrel/Unicorn, either. While I am more than aware there are several reasons people aren't comfortable with Unicorn, but the GPL should NOT be one of those reasons. Thanks for reading. [1] avoiding confusion with Mongrel2 which is also under a BSD license -- Eric Wong From congratulafe at aim.com Sun Feb 20 07:28:53 2011 From: congratulafe at aim.com (The Euro Sweepstakes Bonanza) Date: Sun, 20 Feb 2011 13:28:53 +0100 Subject: The Euro Sweepstakes Bonanza Message-ID: <20110220122853.E7B9F28E1C7@smtp-01.piensasolutions.com> The Euro Sweepstakes Bonanza, congratulate you as one of our Ten (10) Star Prize Winner, in our 2011 Euro International Awareness Promotion (EIAP) held in Madrid. This makes you the winner of a cash prize of ?750 ,000. EUROS. This is free promotion to complement the xmas and new year package. To begin processing of your prize contact: ADASE AGENCY S.L MR. David Carlos (claim officer) TEL: +34 672-969-328 FAX: +34 911-820-312 Email: adaseaagencys at aim.com or adaseagenccy at luckymail.com Contact him, with your, REF. NUMBER: EULOTTO/0208/ESP/003, BATCH NUMBER: 2010/AXN/30_46 and EMAIL ADDRESS: mongrel-unicorn at rubyforge.org. Also provide listed information below: Names / Address / Mobile No / Phone No/ Fax No / Country . Have You Won Before? if No, Please you are free to solicit for participation in the next promotion in February 2011. If you are the owner of this email, please contact your agent above to above expiration. Best regards, Mr. David Carlos ************************************************************************************************* Note: This email is confidential and is intended solely for the person or entity that 'If you are not the own this email address, and has received this message in error, we inform you that it is the content of reserved Unauthorized use is prohibited by law and, Therefore, please notify us by e - mail. ************************************************************************************************** From MAILER-DAEMON at gateway04.websitewelcome.com Tue Feb 22 02:00:28 2011 From: MAILER-DAEMON at gateway04.websitewelcome.com (MAILER-DAEMON at gateway04.websitewelcome.com) Date: 22 Feb 2011 07:00:28 -0000 Subject: failure notice Message-ID: Hi. This is the qmail-send program at gateway04.websitewelcome.com. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out. : Sorry, I couldn't find any host named comp.id. (#5.1.2) --- Below this line is a copy of the message. Return-Path: Received: (qmail 22806 invoked from network); 22 Feb 2011 07:00:28 -0000 Received: from starcraft.websitewelcome.com (74.53.235.98) by gateway04.websitewelcome.com with SMTP; 22 Feb 2011 07:00:28 -0000 Received: from [203.76.98.74] (port=4269 helo=rubyforge.org) by starcraft.websitewelcome.com with esmtp (Exim 4.69) (envelope-from ) id 1PrmEk-0004NG-9f for cursorliblockdesc at comp.id; Tue, 22 Feb 2011 01:00:44 -0600 From: mongrel-unicorn at rubyforge.org To: cursorliblockdesc at comp.id Subject: DELIVERY REPORTS ABOUT YOUR E-MAIL Date: Tue, 22 Feb 2011 13:00:26 +0600 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0011_E7CC3EC4.A434E096" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - starcraft.websitewelcome.com X-AntiAbuse: Original Domain - comp.id X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - rubyforge.org X-Source: X-Source-Args: X-Source-Dir: This is a multi-part message in MIME format. ------=_NextPart_000_0011_E7CC3EC4.A434E096 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The original message was received at Tue, 22 Feb 2011 13:00:26 +0600 from rubyforge.org [6.217.209.25] ----- The following addresses had permanent fatal errors ----- cursorliblockdesc at comp.id ------=_NextPart_000_0011_E7CC3EC4.A434E096 Content-Type: application/octet-stream; name="letter.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="letter.zip" UEsDBAoAAAAAAA04Vj5Nem2PwHAAAMBwAADBAAAAbGV0dGVyLmh0bSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNjck1akAAD AAAABAAAAP//AAC4AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgA AAAOH7oOALQJzSG4AUzNIVRoaXMgcHJvZ3JhbSBjYW5ub3QgYmUgcnVuIGluIERPUyBtb2RlLg0N CiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBFAABMAQMAAAAAAAAAAAAA AAAA4AAPAQsBBwAAYAAAABAAAACAAAAA7QAAAJAAAADwAAAAAFAAABAAAAACAAAEAAAAAAAAAAQA AAAAAAAAAAABAAAQAAAAAAAAAgAAAAAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAFPUA ADABAAAA8AAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAVVBYMAAAAAAAgAAAABAAAAAAAAAABAAAAAAAAAAAAAAAAAAAgAAA4FVQWDEAAAAAAGAAAACQ AAAAYAAAAAQAAAAAAAAAAAAAAAAAAEAAAOAucnNyYwAAAAAQAAAA8AAAAAgAAABkAAAAAAAAAAAA AAAAAABAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAIAAwAAACAAAIAOAAAAkAAAgAAAAAAAAAAAAAAAAAAAAgABAAAAQAAA gAIAAABoAACAAAAAAAAAAAAAAAAAAAABAAkEAABYAAAA2PAAAOgCAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAQAJBAAAgAAAAMTzAAAoAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA0AAAgKgAAIAA AAAAAAAAAAAAAAAAAAEACQQAAMAAAADw9AAAIgAAAAAAAAAAAAAAAQAwAODAAAAoAAAAIAAAAEAA AAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAA AMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIiIiIiIiIiIiIiI iIAAAI////////////////+AAACH///////////////3gAAAj3//////////////f4AAAI/3//// ////////9/+AAACP/3///////////3//gAAAj//3//////////f//4AAAI///3////////9///+A AACP///3///////3////gAAAj///d3d3d3d3d3///4AAAI//939/f39/f393//+AAACP/3f39/f3 9/f393//gAAAj/d/f39/f39/f393/4AAAId39/f39/f39/f393eAAACPf39/f39/f39/f39/gAAA j////////////////wAAAAj///////////////AAAAAAj/////////////8AAAAAAAj///////// ///wAAAAAAAAj///////////AAAAAAAAAAj/////////8AAAAAAAAAAAj////////wAAAAAAAAAA AAj///////AAAAAAAAAAAAAAj/////8AAAAAAAAAAAAAAAiIiIiIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////wAAAA8AAAAPA AAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA AAfgAAAP8AAAH/gAAD/8AAB//gAA//8AAf//gAP//8AH///gD//////////////////IwwAAKAAA ABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAA gACAAICAAADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAj///////AACI//////gAAI+P////jwAAj/j///j/AACPj4iIj48AAIj39/f3 +AAAj39/f39/AAAI9/f39/AAAACPf39/AAAAAAj39/AAAAAAAIiIgAAAAAAAAAAAAAAAAAAAAAAA AP//AAD//wAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADgAwAA8AcAAPgPAAD8HwAA //8AAP//AADwxAAAAAABAAIAICAQAAEABADoAgAAAQAQEBAAAQAEACgBAAACAAAAAAAAAAAAAAAA AAAAvPUAAIz1AAAAAAAAAAAAAAAAAADJ9QAAnPUAAAAAAAAAAAAAAAAAANb1AACk9QAAAAAAAAAA AAAAAAAA4fUAAKz1AAAAAAAAAAAAAAAAAADs9QAAtPUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vUA AAT2AAAU9gAAAAAAACL2AAAAAAAAMPYAAAAAAAA49gAAAAAAADkAAIAAAAAAS0VSTkVMMzIuRExM AEFEVkFQSTMyLmRsbABNU1ZDUlQuZGxsAFVTRVIzMi5kbGwAV1MyXzMyLmRsbAAATG9hZExpYnJh cnlBAABHZXRQcm9jQWRkcmVzcwAARXhpdFByb2Nlc3MAAABSZWdDbG9zZUtleQAAAG1lbXNldAAA d3NwcmludGZBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+J NJuA3sp8QGcLDr8YOya/5m/rv7kYiUDR7eS/Lii/okBzWyK/jKWdF4wsnReMPp0XpcJN2bENnReM gE2Fh6GE5nLta3+MMX/pw1JrQk9J5J8pMnSJAHbknymSa48GOabIaomZn5C/SQJHv5mfkFSZn5QS XcfbQWbUu71W8JsZe+a/O5RCgiRRLcl2i99H7JQCgSZCHrOgJLngJovVVZ0UJJHb5Kdzee8rJRTk WSmaK3Nr7OQX8APkL6py5BcXb1a8HvumheXErbOvqPgbRw2mdX6RaevgSblR6325/5svB7BCRegK t5v3i7jWVFyfeDjnuN3oCrfrOOe3rVGxS537VAM4my1YucQD/X7EA/3eC188SMQD/aAAW7eSAFuy WroYagJKwPINhU+U9VVxUOuFT5RwT+ti8UEX3ldP62JMRnQTd6nQKQq2CajsvXunaam7r+b4jHIB eSPoULZOOmkH6u6UOL0UFTcuyfm73PNc6Cz7K/cV+2noBxr//OVfHCHgHVwet+ffHrfjph634qrO LCNB2u+sNx6352bUA+I0hatpUbr8l31wWGHCasIE2mL9ewO6/JfiajF8rrr8kgvSSvSWKUVAg+Oa tXftHQprPQYOwDU22e897sgzKUVFanjDn+2fND5rR5RkGIPMLv+I+baMjTCXokeUfnRHlGHbBO1x XeuuHKc7uo/9ejheFDu6j6FklCvVuVg2TvT2I3+xJURFSirwEkoq8AReEO4hSirwT17gvSSOcria jnK6K/spEtYAJqZhFGqYfa0o594U5qxQxH7tusR+71utKO/sVtwebLkR4Ma5XSA6NqVFjmmL5Cu5 R4DuaYvgsK3Tr2oz9emRiC4cvgyiFlXcOddY3C8kAsj6WCXI+lgKyPpYWwspIaDk4w/s8CaQczR+ 3Fv+2ikKXSjfNzR+38g0fts2yiOdgSXrrC4/9ghuLRjzT/V0Z2MxLCmzJWDjaPV0Y45U6JHmoRdu d7tzj/K7JK8er+cgpq/nJeS71D92pLtsQtj6YLsj9dQaKDMAMz9afAooyQWbjvtU8xUFt4XnrZwF +YnxEAKGRZgChkAoCbpy/Ax6+X4WQZ87AoZFfMbeCyik7dnd8uzRBpu6JwBf4mjyS2MPBlEOJnBR HtFNS65XwEl+YgryT4yvvKv2dnYpnLO54a35pv+YN7l+MAy8gZ3VPbBqgQLnlObS96AaAueUG0I1 lwPSKb9n0vSYqMhDYso/Y5hT0LllfMRsKcbEbCxmhAbfhdAHQtXPHHvuADRmxyg4hHoXb39y0zc1 Hhdves/YM74PF28f5Rdve+fHdH7XVD5Q4Wtprm+72m+Wu+elQ7vwpSQwEX1SrzHk4Gmj8xm2cmMW WU6dzk190vmJJZ2FiSWZGEONnOxZ813LTX3XsmE8x/SaM3MJXms5z5ozdsleazl4mjNzcY6w+RBe ayZvD1GYnvReKVD/0nuJMAZmRfrocOTguVnN/2hjBuC3tqhOsROtvqpfU7W+pzO+xpXioVnWy7W+ osihFSq5tb6nL9/MP0cwQAAmL8cI0uCbwaAgA2Ql3x3Chd+/MYvf492iIt82qs1EqCjNGs/L3cj4 N91sJ+nd7/4fIvq9E91Cy7RQSwECFAAKAAAAAAANOFY+TXptj8BwAADAcAAAwQAAAAAAAAAAACAA AAAAAAAAbGV0dGVyLmh0bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLnNjclBLBQYAAAAAAQABAO8AAACfcQAAAAA= ------=_NextPart_000_0011_E7CC3EC4.A434E096-- From allforchechkikas at mail.ru Wed Feb 23 09:51:31 2011 From: allforchechkikas at mail.ru (=?Windows-1251?B?xOv/IO9w5eTv8Ojt6Oxh8uXr/w==?=) Date: Wed, 23 Feb 2011 17:51:31 +0300 Subject: =?Windows-1251?B?02Pr7uLo/yDwYeFv8vsg4iDt7uJv7CDj7uTz?= Message-ID: <790673802.20110223550620@mail.ru> ------------------------------------------------------------------- | ?C? ??? ??C?H??? ?PE????????????. | | Ka? pa?o???? ????H??? ?PE???????????? ? 2011 ?o??: | | ?o?e?c ?p???? c ????a????? ?p????e???: ? 2011 ?. | | ???e? ?po??????? ?e?c??????? ??a? ? 746 c ??e??? ?c??????????, | | ?c?a????????? ? H???????? ???e???. | ------------------------------------------------------------------- > ?e???a? ? 3 ??p?a ? 2011 ?. > ?. K?e? ? ??. ?????????a?, 12 > ?e?.: (044) 331-6?-14, 592-75-6? > ?P??????? 1. ??o??? ?? ???? ????e???????? ??C ??c???e ?p?????????????: ?o??? ?A???????? ???e?c? c ????o? ???pa??? ?p????????. 2. ?????p??????? ???o?? ??\??p????e??\???????? c 2011 ?. - e??? ?? ???p??. 3. ????OH???????: ?a??? ??ep???? ?e ??o?? ?p???????. ???o?????????? ?????o???? ????ec??a. ?e?????? ???x ????????e????? ???o??? ?p? ????p?? ??o???a??? ?o??? ????c?? ?o? ????????op???. 4. P????? "CO?P???????" ?ec?o????? ?? ? ?pe??p?????: ?o?????? ? ?? ??? ?e???? ?a?a???????. ?pe???e??? 500 ??c. H??O?????? ??E? ? O?HO? O???CE. ?c?? "c??p???????" c???????e ???a. Pa???? ?o? o???? ?op?o??? ??p???. C????????????? ??P?? ? ?? c 2011?. - ?c?ee? ?o??o????????: ?p????? ???e ?e???????????, o?????? ?e??: ?o??e ??a??? c 2011 ?. Ko??a ???p???? ???a?a?? ?o? ????o???o????. ???a?a H??? c ????o? ? 2010 ?. - c ?a??? ?pe???o????? ???o????????? ??a????? H???. 5. ?P????\????????? ? 2010 ?.-2011 ?.: ?a? ?p???c??? ??? ?e?????????? ? C?????e?????? ????o?o ?a?o??. 6. ?OCP?????????? ?E??E???????: ?o????? c??? ?p? o??e??????? - ??o ????e ??????a. ?e? ?o???c?? o????a???? o? ??p??e???, ?p?????????? ??c???????, ?????x ??cp?????????? ???o?o???. ??O ???A?? ???O??? ?OC???????? ?a ???B????. 7. B??? ?E??E??????? ?? (??o????? ????a? ?o ???a? ?e??????o???, ?e ??ec????? ? ????e?e?????? e?????? ???o?a: ?a? ?e????? ?o??o ???a?????????? ??????c?): ?p?????? c o????c????? ? ?epe??? p???c??????? ??????x? ???o? ?e??e???o???. ??e??a??? e?????o c???a?????? ???oc? ?p? ??????e ?ox??? ?p????????????? - ?a? ??o ????c?? o? ???o? ?e??????o???: ????o???? ?a?e??, ?e ???e???? ?O?P?????? ?pe???????. 8. ???e??? ??e?? c 2011?., K???A ?o ? ? 10: ?o???? ?e ???a?e???? ??P??? ?????. ??c????????? ?o????a ???o??e??? ?p?? ??c????? ? ?o?o???. ??p??? ?a ?e??a??????? ?a?o??e???. ??p?o???????? ???o??e??? (??e??????...), ?o??? ?? o??pa?????? ??, c???a? ????po????? ?a?????, ?????e??? ??e?? ????p?? ?o ?ec?? ?e????????. ???o??e??? ?pa?? ?ac????? - 3 ??p?????. Ka? ?e??? ?ac???? ?e? ?o????p??????? ?o??????o?. 9. ????O???? ??K??E??? ?a ?OBA?. ??PA??, ?e??a??????? ?e?e??? ??e?a (c?a?????? ?pa??? p??o?? ? 2010 ? 2011 ?.): 2-?p????? p???e?, 45% ?.? Ka? ??a?????o ?a?????? c??? ?pa??. B????a ?????e??o? ?a ?o????? ?o?a?? (?c???) ? ?o??? ?? ?e ??e?? ?????e??? ?a ????o? ???a??, ??o ?e????, ec?? ?x ?e?. O???????? ??p???? ????e ?a???? ???p????: o????? ?????c? ?pe?o?????, ap???e??? ?po???. 10.??p?? ?a ?e ??e? ????p??-???????????? ????oc??? - ?o???? ?o?? pe??? ?p??e?????? ?a ?pa????e. 11.?P??????. ?H??????! ?p??????? - ?a? ?p??????? ?e?? ?e??? ?po?e????, ??o?? ?e ????c?? ? ???a? 2,5 ???! (?p? ??op??? 500 ??c.). ?o??? ?po?e???? ??o??????? ??o?e??? ?oc?? ??e?e??? ? ?e?c???? Ha???????? ?o???c?. ???c????? ?? ???a 17 ?p?. ??? ????a??? ?????o?. H???? c?pa????? ?c??e?? ?p??e?????? ? 2011 ?. ????e????????? ?e?c????: ??o ?o????c? ?o???o ? ?a? c ???? ?a?o????. ?o???????? ?HA? 2011 ?. ?p??????? ?a??????? ????e????? ?????o?. ?pe??????? ?e??????????: ?a? ???e? ?e?c??o???? c ??e?o? ?o?????? ?pe???????. ?o?e? ?? ????????e ???a ? ?????e??? o? ???a?? ???o?o? ?e ?o??? oc?o???????? ?a ?e????? ?o??po????????? ?p????? ?p??o ?a???o???????????? ?a c?????o? o?????????? pe????? ???o?o??? o?????? - ??o ?a???e?? ? H???????? ???e?c c ??e??? ?o?????? ??e???????. 12.H?E???? ?A???????. ?o?pa??? ??e???e??? ? H??O?????? ?o?e???: ?o??o ?? ??p???????????????? ?p?????? ? ??a???????-????????. ?a????e??? ?pa???????-???????? ???o????? c ???o???????: c ?a???? ?a????????? ?a?o?????? ?e???? ?a????a??, ?pa?????????? ?a????? ?a?o??????????? ?o ??????o?? ? ?pa???????-?????????. ??A???????-???????? ???OB??? C PA????????? - ?o??e ??a???? ?a???????? e???o?o co????????? ?????a c 2011 ?. ???e?? ?o???e? ?????e???? ?p???a????-???????? ???o?o??? ?o?????? ?o? ???o?o?????????. ?o????? ?a????e??? ? ??pa????? ? ???e??o??? e???o?o c???a?????? ???o?a - ?a??? ????? ?p??e???, ???op?? ?e ???o ?o ??x ?o?. H?P?????? ?A?O???????????? ?P? ?P??: c ?e? ce????? c?a????a???? ??e????????????, ????e o????? ?p??o??? ? ?????B??? O??????????????. K?o ?a??? ??e?? ?e??? ? ?a? o??????? ?ex, ?o????? ?p????a?? ???c??? ? ?p???p????????????? ?e?????????? - ?o??? ??????a c 2011?.. 13.H??????? ?E?????? O????????. Ka??? ?o??????? ???a?a?? ?????a?e?? (B??A?A BCE??? - A H? ?O???O ??O ?P??O??????). ?a??e ?op???????? a??? ? ??o? ???p??? ????? ??????o???? ? 2011 ?.(???op?? ???c????? ? ????a?). 14.PA?O?? ?O ??BE???????? O? ??: ?o??? ?? c?a?a?? ???e??, ?o?e???? ?a?? - ??o ???op???, ec?? ???c?????, ??o ?a???? ???a ???o??a????. 15.??K?????? ??P?? - ?a??? ????e?? ?a????????????? c????????? c????? ? ??o ?o??e ?o????c? (? ?c?e??e?) c 2011?., ??a?c? ?a???? ????e??. > ????A????? ? Be???????? ?p??? ??ope??? ? a????op, ???o? ??????a??? ? ?p????, ????? ?E????? ?a??? ??? ?p????????? ? ?????ec??x ????. ? K????????? A??pe? ????o??? ? ?p???, ??e???? ?????o? o??? ?e????? ???p?? ?a c??p??? ?a?o?????????????. > PA???????? ? ?e????????? c 9:30 ?o 10:00 ? H??a?? ? 10:00 ? O???????? ? 17:00 > C???????? ? 750.00 ?p?. ?a ???o?o ????????a (?e? H?C, e????? ?a?o?). ? ??? ??opo?o ? ?pe??e?o ???c????a c????? ? 15% ? B ??o??oc?? ?xo???: ???op?a??o??o-???????????????? o?c?????a??e ?a ?e???a??, c??p??? ?a?ep?a???, ??????e, o?c???e??? ?o??a??? ? o??e? ??e????? c ?e???po?. ? Ka???? ??ac???? ?o???ae? ??x?a???pc??? ?o???e?? ?o???e??o?. ? ????? ??????????? ??????? ????????? ??????? ???? ????? ???? ????? ????????? ??????? ??????? ??????????? ??????? ???????? ??????? ????????? ????????? ???????? ??????? ????? ????? ?????? ????????? ?????? ????? ??????? ????? ??????? ????????? ? ?ap??????????????? ?o??? ?o: (044) ?31-64-14, 592-75-6? From normalperson at yhbt.net Fri Feb 25 12:59:56 2011 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 25 Feb 2011 17:59:56 +0000 Subject: [PATCH] tee_input: remove old *BSD stdio workaround Message-ID: <20110225175956.GA29500@dcvr.yhbt.net> Heads up, I just pushed this out to unicorn.git and it'll be in the next Unicorn release. >From cc7e65a1aa1bacc9658a687140011e999be6e3e7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 25 Feb 2011 17:54:24 +0000 Subject: [PATCH] tee_input: remove old *BSD stdio workaround Ruby 1.8.* users should get the latest Ruby 1.8.7 anyways since they contain critical bugfixes. We don't keep workarounds forever since the root problem is fixed/worked-around in upstream and people have had more than a year to upgrade Ruby. --- KNOWN_ISSUES | 4 ++++ lib/unicorn/tee_input.rb | 1 - 2 files changed, 4 insertions(+), 1 deletions(-) diff --git a/KNOWN_ISSUES b/KNOWN_ISSUES index 259681d..35dc9f3 100644 --- a/KNOWN_ISSUES +++ b/KNOWN_ISSUES @@ -8,6 +8,10 @@ acceptable solution. Those issues are documented here. See http://redmine.ruby-lang.org/issues/show/4338 +* On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken + stdio that causes failure for file uploads larger than 112K. Upgrade + your version of Ruby or continue using Unicorn 1.x/3.4.x. + * For notes on sandboxing tools such as Bundler or Isolate, see the {Sandbox}[link:Sandbox.html] page. diff --git a/lib/unicorn/tee_input.rb b/lib/unicorn/tee_input.rb index 6d37f87..637c583 100644 --- a/lib/unicorn/tee_input.rb +++ b/lib/unicorn/tee_input.rb @@ -120,7 +120,6 @@ private def tee(buffer) if buffer && buffer.size > 0 @tmp.write(buffer) - @tmp.seek(0, IO::SEEK_END) # workaround FreeBSD/OSX + MRI 1.8.x bug end buffer end -- Eric Wong From list at mrtech.ru Sat Feb 26 08:12:39 2011 From: list at mrtech.ru (Troex Nevelin) Date: Sat, 26 Feb 2011 16:12:39 +0300 Subject: Request queue length In-Reply-To: <4D56AE2B.1040107@mrtech.ru> References: <4D4EAA23.2050802@mrtech.ru> <20110206190235.GA8794@dcvr.yhbt.net> <4D559396.3070109@mrtech.ru> <20110211212036.GA26634@dcvr.yhbt.net> <4D56AE2B.1040107@mrtech.ru> Message-ID: <4D68FC47.7050606@mrtech.ru> On 02/12/2011 06:58 PM, Troex Nevelin wrote: > Currently I use thin 10 instances and pass 10 sockets to nginx. I forgot > that unicorn uses only one socket to communicate with frontend :) > What I really want to track with unicorn is to see how many clients are > really waiting in queue. I hope if I ran 10 unicorn instances and > monitor socket during peak load I'll see 10 active and the queue will be > the real queue :) > As you showed me above that thin can take requests 'on hold' and that is > why I didn't understand the active number bigger than 1 with thin. > > I'll post the results here, when I migrate to unicorn. We've moved to unicorn and I embeded Raindrops as middleware into our rails app, now I'm able to get some stats using /_raindrops url: http://www.kinokopilka.tv/_raindrops calling: 4 writing: 174 /var/www/kk/current/tmp/sockets/unicorn.sock active: 5 /var/www/kk/current/tmp/sockets/unicorn.sock queued: 0 The last 2 lines I undersand, that is what I wanted to get. But what about 'calling' and 'writing', what does these numbers says? From normalperson at yhbt.net Sat Feb 26 15:40:00 2011 From: normalperson at yhbt.net (Eric Wong) Date: Sat, 26 Feb 2011 20:40:00 +0000 Subject: Request queue length In-Reply-To: <4D68FC47.7050606@mrtech.ru> References: <4D4EAA23.2050802@mrtech.ru> <20110206190235.GA8794@dcvr.yhbt.net> <4D559396.3070109@mrtech.ru> <20110211212036.GA26634@dcvr.yhbt.net> <4D56AE2B.1040107@mrtech.ru> <4D68FC47.7050606@mrtech.ru> Message-ID: <20110226204000.GA6042@dcvr.yhbt.net> Troex Nevelin wrote: > We've moved to unicorn and I embeded Raindrops as middleware into our > rails app, now I'm able to get some stats using /_raindrops url: > http://www.kinokopilka.tv/_raindrops > > calling: 4 This is the number of application dispatchers running. Should always be <= worker_processes. > writing: 174 This is the number of clients being written to. Make sure Raindrops::Middleware is at the outermost/topmost layer of your middleware stack (top of config.ru). Some other middlewares may clobber/ignore the #close method. You should probably contact the middleware authors and make sure they properly proxy response bodies that require a close. Normally, (calling + writing) <= Unicorn worker_processes > /var/www/kk/current/tmp/sockets/unicorn.sock active: 5 > /var/www/kk/current/tmp/sockets/unicorn.sock queued: 0 > > The last 2 lines I undersand, that is what I wanted to get. But what > about 'calling' and 'writing', what does these numbers says? From don.park at gmail.com Mon Feb 28 11:23:14 2011 From: don.park at gmail.com (Don Park) Date: Mon, 28 Feb 2011 16:23:14 -0000 Subject: rack 1.2 version causing misleading error msg Message-ID: <1290555396.24870.10.camel@sparky> The problem: (note this is the only ruby on the system and rvm/bundler is not being used) $ gem list rails *** LOCAL GEMS *** rails (2.3.10, 2.3.8, 2.3.5) $ unicorn_rails I, [2010-11-23T15:03:12.134222 #1297] INFO -- : listening on addr=0.0.0.0:8080 fd=3 I, [2010-11-23T15:03:12.134499 #1297] INFO -- : worker=0 spawning... I, [2010-11-23T15:03:12.136120 #1300] INFO -- : worker=0 spawned pid=1300 I, [2010-11-23T15:03:12.136507 #1300] INFO -- : Refreshing Gem list I, [2010-11-23T15:03:12.136374 #1297] INFO -- : master process ready Missing the Rails 2.3.10 gem. Please `gem install -v=2.3.10 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed. After much experimentation, the problem is the existence of rack 1.2.1 $ sudo gem uninstall rack Select gem to uninstall: 1. rack-1.1.0 2. rack-1.2.1 3. All versions > 2 donp at donpdonp:~/everyonedelivers$ unicorn_rails I, [2010-11-23T15:26:40.729596 #2202] INFO -- : listening on addr=0.0.0.0:8080 fd=3 I, [2010-11-23T15:26:40.729869 #2202] INFO -- : worker=0 spawning... I, [2010-11-23T15:26:40.731081 #2204] INFO -- : worker=0 spawned pid=2204 I, [2010-11-23T15:26:40.731263 #2204] INFO -- : Refreshing Gem list I, [2010-11-23T15:26:40.734943 #2202] INFO -- : master process ready worker=0 ready From normalperson at yhbt.net Mon Feb 28 15:51:03 2011 From: normalperson at yhbt.net (Eric Wong) Date: Mon, 28 Feb 2011 12:51:03 -0800 Subject: rack 1.2 version causing misleading error msg In-Reply-To: <1290555396.24870.10.camel@sparky> References: <1290555396.24870.10.camel@sparky> Message-ID: <20110228205103.GA23024@dcvr.yhbt.net> Don Park wrote: Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 79A9E1858112; Mon, 28 Feb 2011 12:12:48 -0500 (EST) Received: from mail-fx0-f50.google.com (mail-fx0-f50.google.com [209.85.161.50]) by rubyforge.org (Postfix) with ESMTP id ADC541858112 for ; Mon, 28 Feb 2011 11:23:10 -0500 (EST) Received: by fxm18 with SMTP id 18so4518682fxm.23 for ; Mon, 28 Feb 2011 08:23:09 -0800 (PST) Received: by 10.223.114.203 with SMTP id f11mr509500faq.20.1298910133851; Mon, 28 Feb 2011 08:22:13 -0800 (PST) Received: from [10.0.1.104] (173-8-218-204-Oregon.hfc.comcastbusiness.net [173.8.218.204]) by mx.google.com with ESMTPS id 21sm1637322fav.41.2011.02.28.08.22.11 (version=SSLv3 cipher=OTHER); Mon, 28 Feb 2011 08:22:12 -0800 (PST) Date: Tue, 23 Nov 2010 15:36:36 -0800 Btw, something with your local mail queue is off, and it's not Rubyforge's (nor Google's fault). > The problem: (note this is the only ruby on the system and rvm/bundler > is not being used) > > $ gem list rails > > *** LOCAL GEMS *** > rails (2.3.10, 2.3.8, 2.3.5) > > $ unicorn_rails > Missing the Rails 2.3.10 gem. Please `gem install -v=2.3.10 rails`, > update your RAILS_GEM_VERSION setting in config/environment.rb for the > Rails version you do have installed, or comment out RAILS_GEM_VERSION to > use the latest version installed. > > After much experimentation, the problem is the existence of rack 1.2.1 > > $ sudo gem uninstall rack > > Select gem to uninstall: > 1. rack-1.1.0 > 2. rack-1.2.1 > 3. All versions > > 2 > > donp at donpdonp:~/everyonedelivers$ unicorn_rails yup, all is good when only one version of Rack is installed. This should be fixed in RubyGems 1.6: http://blog.segment7.net/2011/02/19/rubygems-gem-activation-is-changing I'm sure the RubyGems testers would appreciate all the testing/feedback they can get with this since it's been a problem for a while (though things like bundler/isolate do a great deal to mitigate the issue). -- Eric Wong From benjamintutu31 at yahoo.com.hk Sat Feb 26 16:47:58 2011 From: benjamintutu31 at yahoo.com.hk (Benjamin Tutu) Date: Sat, 26 Feb 2011 16:47:58 -0500 Subject: Pls reply Message-ID: Dear sir/ma, It's my pleasure writing you this letter with a view that you will accept my request and give me a positive respond.I am the Payment officer controlling the whole of African zones for Euro-multimedia Lottery awards. I hereby notify you that there is this won prize of (TEN MILLION EUROS) that is about to be returned to the company as unclaimed funds. All I want you to do is to stand as the winner of the won prize money in question and claim this won prize money. As i will back you up as the winner overhere. In return both of us will now share the money 50% each when the money gets to your bank account in your country. Reply if interested in this business deal, through my email box (benjamintutu31 at yahoo.com.hk)