Few thing to consider: 1. Which API calls pause? If only certain calls pause, then probably you have something specific to suspect. Try adding a dummy REST call - see if that call pauses while others do. 2. Is any of your services running on a t1.micro or a burst-oriented EC2 instance on AWS? Try changing the instance type in that case. 3. Can you mock out the components that you suspect could be a problem? Begin by mocking out everything you suspect, then replace the mock with actual impl one component at a time until you isolate the problematic component. 4. Have you tried running a profiler? 5. Have you tried printing GC info? Maybe this could be useful: http://blog.ragozin.info/2011/09/hotspot-jvm-garbage-collection-options.html
Shantanu On Monday, 15 September 2014 09:45:14 UTC+5:30, larry google groups wrote: > > > I have an embarrassing problem. I convinced my boss that I could use > Clojure to build a RESTful API. I was successful in so far as that went, > but now I face the issue that every once in a while, the program pauses, > for a painfully long time -- sometimes 30 seconds, which causes some > requests to the API to timeout. We are still in testing, so there is no > real load on the app, just the frontenders, writing Javascript and making > Ajax calls to the service. > > The service seems like a basic Clojure web app. I use Jetty as the > webserver, and the libraries in use are: > > Ring > > Compojure > > Liberator > > Monger > > Timbre > > Lamina > > Dire > > When someone complains about the pauses, I will go test the service, and I > can hit with 40 requests in 10 seconds and it has great performance. The > pauses actually seem to come after periods of inactivity, which made me > think that this had something to do with garbage collection, except that > the pauses are so extreme -- like I said, sometimes as much as 30 seconds, > causing requests to timeout. When the app does finally start to respond it > again, it goes very fast, and responds to those pending request very fast. > > But I have to find a way to fix these pauses. > > Right now I packaged the app as an Uberjar and put it on the server, spun > it up on port 24000 and proxied it through Apache. I put a script in > /etc/init.d to start the app using start-stop-daemon. > > Possible things that could be going wrong: > > Maybe Jetty needs more threads, or maybe less threads? How would I test > that? > > Maybe the link to MongoDB sometimes dies? (Mongo is on another server at > Amazon) How would I test that? > > Maybe it is garbage collection? How would I test that? > > Maybe I have some code that somehow blocks the whole app? Seems unlikely > but I'm trying to keep an open mind. > > Maybe the thread pool managed by Lamina sometimes gets overwhelmed? How > would I test that? > > Maybe when Timbre writes to the log file it causes things to pause? (But I > believe Timbre does this in its own thread?) How do I test that? > > This is a small app: only about 1,100 lines of code. > > I don't have much experience debugging problems on the JVM, so I welcome > any suggestions. > > > > > > > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.