如何在tomcat上配置jruby on rails
本文介紹了jruby on rails在tomcat的配置實踐。由于要在tomcat上部署3個rails項目,暫時使用的版本是rails1.2.3,jdk6 ,jruby1.1.2,tomcat5.5.12
用了一臺非常爛的測試機器(p4 2.8 1g),當然,真實服務器比這個要好多了
1.使用rails開發(fā)應用之后,使用goldspike打包,不過我老是不成功,所以基本都手動添加,需要的東西主要是
Web-inf下面的lib:
Java代碼
- jruby-complete-1.1.2.jar
- mysql-connector-java-5.1.6-bin.jar
- goldspike-1.6.jar
- commons-pool-1.3.jar
- activation-1.1.jar
web-inf下面的gems,從你的ruby gems那里copy過來就可以了
主要有rails,另外由于使用mysql,所以有
Java代碼
- activerecord-jdbc-adapter-0.8
- activerecord-jdbcmysql-adapter-0.8
- jdbc-mysql-5.0.4
- jruby-openssl-0.2.3 //可選
2.修改environment.rb,不過貌似rails2是不需要配置這個的
Ruby代碼
- if defined?(JRUBY_VERSION)
- require 'rubygems'
- gem 'activerecord-jdbc-adapter'
- require 'jdbc_adapter'
- end
還有database.yml,使用jndi
Ruby代碼
- production:
- adapter: jdbc
- jndi: java:comp/env/jdbc/gdpolice
最后是production.rb
Ruby代碼
- config.cache_classes = true
- config.action_controller.consider_all_requests_local = false
- config.action_controller.perform_caching = true
- config.action_view.cache_template_loading = true
- config.breakpoint_server = false
3.配置web.xml
Xml代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <context-param>
- <param-name>jruby.standalone</param-name>
- <param-value>true</param-value>
- </context-param>
- <context-param>
- <param-name>rails.env</param-name>
- <param-value>production</param-value>
- </context-param>
- <context-param>
- <param-name>files.default</param-name>
- <param-value>rails</param-value>
- </context-param>
- <!-- 設置jruby線程池參數(shù) -->
- <context-param>
- <param-name>jruby.pool.maxActive</param-name>
- <param-value>10</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.pool.maxWait</param-name>
- <param-value>50000</param-value>
- </context-param>
- <!-- 其他優(yōu)化設置:objectspace和jit參數(shù),設置session為db方式 -->
- <context-param>
- <param-name>jruby.objectspace.enabled</param-name>
- <param-value>false</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.jit.threshold</param-name>
- <param-value>0</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.session_store</param-name>
- <param-value>db</param-value>
- </context-param>
- <servlet>
- <servlet-name>rails</servlet-name>
- <servlet-class>org.jruby.webapp.RailsServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>files</servlet-name>
- <servlet-class>org.jruby.webapp.FileServlet</servlet-class>
- </servlet>
- <listener>
- <listener-class>org.jruby.webapp.RailsContextListener</listener-class>
- </listener>
- <!-- Allow all requests to go to the files servlet first -->
- <servlet-mapping>
- <servlet-name>files</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <resource-ref>
- <res-ref-name>jdbc/gdpolice</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
- </web-app>
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <context-param>
- <param-name>jruby.standalone</param-name>
- <param-value>true</param-value>
- </context-param>
- <context-param>
- <param-name>rails.env</param-name>
- <param-value>production</param-value>
- </context-param>
- <context-param>
- <param-name>files.default</param-name>
- <param-value>rails</param-value>
- </context-param>
- <!-- 設置jruby線程池參數(shù) -->
- <context-param>
- <param-name>jruby.pool.maxActive</param-name>
- <param-value>10</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.pool.maxWait</param-name>
- <param-value>50000</param-value>
- </context-param>
- <!-- 其他優(yōu)化設置:objectspace和jit參數(shù),設置session為db方式 -->
- <context-param>
- <param-name>jruby.objectspace.enabled</param-name>
- <param-value>false</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.jit.threshold</param-name>
- <param-value>0</param-value>
- </context-param>
- <context-param>
- <param-name>jruby.session_store</param-name>
- <param-value>db</param-value>
- </context-param>
- <servlet>
- <servlet-name>rails</servlet-name>
- <servlet-class>org.jruby.webapp.RailsServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>files</servlet-name>
- <servlet-class>org.jruby.webapp.FileServlet</servlet-class>
- </servlet>
- <listener>
- <listener-class>org.jruby.webapp.RailsContextListener</listener-class>
- </listener>
- <!-- Allow all requests to go to the files servlet first -->
- <servlet-mapping>
- <servlet-name>files</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <resource-ref>
- <res-ref-name>jdbc/gdpolice</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
- </web-app>
注明幾點:
jruby.standalone為false的時候,需要定義jruby.home
rails.env就對應rails的那幾種環(huán)境
jruby線程池有幾個參數(shù)(需要根據(jù)情況來配置),如下:
Java代碼
- jruby.pool.maxActive #最大運行時數(shù)量,默認4
- jruby.pool.minIdle #最小運行時數(shù)量 默認2
- jruby.pool.initialSize #運行時初始數(shù)量 默認jruby.pool.minIdle 的值
- jruby.pool.checkInterval #檢查是否需要更多運行時之間的毫秒數(shù) 默認1000
- jruby.pool.maxWait #最長等待時間 默認3000
jruby.objectspace.enabled貌似默認就是false
jruby.jit.threshold設置使用jit編譯的方法數(shù)量的閥值,為0表示全部使用jit
jruby.session_store為db表示使用rails的db方式保存session
resource-ref只是針對5..5或以下,6.0不需要這個鬼東西
4.配置tomcat
server.xml(其實跟普通的web應用沒什么區(qū)別,就是配置數(shù)據(jù)源什么什么的,不說了)
另外有需要注意的是:
Jruby占用的內存,cpu相當驚人,所以要做好準備,需要配置好tomcat的內存參數(shù)(具體還是要配合機器)
Java代碼
- #catalina.sh
- JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m"
- #catalina.bat
- set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m
- #catalina.sh
- JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m"
- #catalina.bat
- set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m
另外,tomcat服務器優(yōu)化的就不說了,例如加httpd,調節(jié)參數(shù),apr,nio之類。。。
5.其他觀察結果:由于部署多個rails,用jconsole監(jiān)測,內存消耗很大,特別是permsize的消耗,一直維持在85m上下,所以導致真實服務器也出項outofmemory。經(jīng)過測試,把上個項目的lib提取到tomcat的lib去(只保留一份),permsize僅僅維持在50m那樣子。另外要盡量使用jruby的新版本,1.1比1.0的性能提升相當大(感覺非常明顯)。后來還啟用了jruby的server模式,感覺就是tomcat的啟動速度慢許多了。。至于性能提升,暫時還沒察覺。。jruby有jit和aot兩種編譯模式,aot只是試過一下,還沒跟jit進行過測試對比,暫時不清楚。
6.以上就是jruby on rails在tomcat的配置實踐。jruby on rails的部署方式還是挺不錯的?,F(xiàn)在很期待jruby。
【編輯推薦】