“我每个进程有100个线程限制 . 所以当我超过这个限制时,我得到:java.lang.OutOfMemoryError:无法创建新的本机线程.Compojure正在使用jetty环适配器 . 是否有配置服务器一次只接受一百个线程到servlet?“
这里似乎有一个简洁的解决方案,但似乎已经过时了:
Limiting the number of threads Compojure spawns
我把它放在我的project.clj中:
:dependencies [[org.clojure / clojure“1.6.0”] [compojure“1.1.8”] [ring / ring-json“0.3.1”] [c3p0 / c3p0“0.9.1.2”] [org.clojure /java.jdbc“0.2.3”] [cheshire“5.4.0”] [ring / ring-jetty-adapter“1.1.8”] [environ“0.2.1”] [hiccup“1.0.0”] [com .novemberain / monger“2.0.0”] [org.clojure / data.json“0.2.5”]]
我把它放在我的控制器文件中:
(:import [org.mortbay.thread.QueuedThreadPool])
...
(defn -main [](run-jetty app {:port(if(nil?(System / getenv“PORT”))8000; localhost或heroku?(Integer / parseInt(System / getenv“PORT”))):配置器#( . setThreadPool%(QueuedThreadPool.100))}))
当我尝试时,我得到:
线程“main”中的异常java.lang.IllegalArgumentException:无法解析类名:QueuedThreadPool,编译:
你能否向我推荐一些clojure插件注入我的库中的建议,以免在Heroku中为每个进程限制惊吓100个线程?
1 回答
您似乎使用的是过时版本的ring / ring-jetty-adapter(1.1.8),最新版本是1.3.2 .
在最新版本中,您可以在ring.adapter.jetty / run-jetty选项中指定:max-threads .
因此,要限制jetty使用的最大线程数,可以执行以下操作:
当然,您的JVM中可能存在其他线程,这意味着您可能必须降低分配给jetty的线程数,以便不超过Heroku总体限制 .
如果您仍想使用QueuedThreadPool,那么您需要使用:
代替