2016-04-20 33 views
0

我有Apache的tomcat web服務器,在這裏我運行3-4 java spring和hibernate應用程序。但問題是當服務器請求過多時,服務器會發出內存不足或堆大小錯誤,並且最終由於服務器沒有響應而導致站點停止運行。還有一段時間會出現連接斷開或套接字錯誤等錯誤。我希望我的服務器至少可以處理2000個請求。如何處理負載和配置的tomcat 7服務器和應用程序,所以它能夠處理超過2000的請求

直到現在我實現了很多方法來處理這個問題。在setenv.sh文件大小的改變服務器的

  1. 增加堆大小

CATALINA_OPTS =「$ CATALINA_OPTS -Dfile.encoding = UTF8 -Djava.net.preferIPv4Stack =真-Dorg.apache .catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES =假-Duser.timezone = GMT -Xmx1024m -XX:MaxPermSize參數=1024米」

  • 我已經改變的server.xml來處理更多的連接
  • acceptCount = 「1000」 「接通」 compressionMinSize = 「2048」 noCompressionUserAgents =「GoZilla等MAXCONNECTIONS = 」1500「 redirectPort = 」8443「 的URIEncoding = 」UTF-8「 壓縮= ,茶花女」 compressableMimeType = 「text/html的,文本/ XML,文本/無格式,應用/ JavaScript的,文本/ JavaScript的,文本/ CSS」/>

  • 另外我是在我們的項目中使用c3p0連接池

    org.hibernate.connection.C3P0ConnectionProvider select 1;

    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> 
    <property name="hibernate.connection.username">xxx</property> 
    <property name="hibernate.connection.password">xxx</property> 
    <property name="hibernate.connection.pool_size">1000</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="javax.persistence.validation.mode">none</property>  
    
  • 但我的服務器不能夠同時處理500多個請求。 我的服務器配置

    窗口服務器2012 R2數據中心 拉姆 - 64 GB 系統類型,64位

    任何想法我如何妥善管理所有的事情,我需要在我的tomcat是什麼類型的變化服務器或應用。這樣我的網站就能夠處理2000個請求。

    +0

    如果你有64GB的Ram,你爲什麼給tomcat只有1GB? (-Xmx1024m)? –

    回答

    -1

    爲了避免內存問題(堆大小錯誤)爲什麼不增加tomcat內存配置?

    既然你有64G可以設置memeory配置如下:

    -Xmx50G -Xms10G

    如果您正在使用java8只是增加GC算法:

    - XX:+ UseG1GC

    示例:

    JAVA_OPTS = 「 - Xmx50G -Xms10G -XX:+ UseG1GC」

    0

    首先,你應該找到什麼是對應用程序(取決於您的場景)的瓶頸,增加內存大小,tomcat的池大小和JDBC池的大小可能會提高性能,但不是真正的重點。

    1. 檢查哪個步驟花費了很多時間處理請求?你是什​​麼網絡框架? struts2,restlet,springMVC,servelt?
    2. 使用jvisualvm(或其他工具)分析堆上的對象,看垃圾收集時間(完整的GC頻率),有一些慢代碼?
    3. 如果有很多查詢,請在休眠時添加L2緩存。
    4. 什麼是服務器配置,嘗試單獨的應用程序到多個tomcat實例(小心關閉端口等)。
    +0

    我有Restful服務,Spring MVC應用程序和簡單的jsp hibernate應用程序。在用戶視圖站點和移動應用程序中使用Restful服務。 Spring MVC用於管理應用程序。如果我使用多個tomcat實例和單獨的restful服務和管理模塊,那麼我如何管理多個tomcat,因爲目前我的tomcat運行在端口80.如果使用2個tomcat實例,那麼我只能運行1個端口80中的tomcat,使所有應用程序都能運行。我的所有應用程序在相同的域名下運行。 – 007

    +0

    您想要增加移動應用程序的寧靜服務性能嗎?什麼是寧靜的服務框架?球衣?移動應用程序請求對服務有數據庫查詢?如果是的話,你可以嘗試刪除數據庫查詢和使用Jmeter(或其他)進行測試。如果你想分離到2個實例,你可以嘗試使用Ngnix作爲不同上下文中的代理,但是在同一個域上。 –

    相關問題