操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    Tomcat是常見的免費的web服務器,非常好用,但是經常會出現各種錯誤。

    (Tomcat資源:https://download.csdn.net/download/june_anlanruoshui/10826865)

    運行Tomcat/bin/startup.bat時閃退,可以在startup.bat最后加入一句pause,使運行窗口不關閉,便于排錯(調試完成記得刪除)

    一、 沒有正確定義JRE_HOME環境變量。

    Error:the JRE_HOME environment variable is not defined correctly

    如圖:

    解決辦法:

    重新檢查JDK配置。

    配置方法:

    找到“我的電腦”,右鍵打開屬性->高級系統設置->環境變量:

    配置JAVA_HOME:

    修改變量 Path ,在最前面加上 %JAVA_HOME%\bin;

    (這是win10如果是其他版本的加在Path前面即可)

    (在命令行中運行java -version 檢查當前JDK是否配置成功)

    二、無法創建Java虛擬機

    出現如下錯誤:

    Error: Could not create the Java Virtual Machine.

    Error: A fatal exception has occurred. Program will exit.

    錯誤:無法創建Java虛擬機。

    錯誤:發生致命異常。程序將會退出。

    解決辦法:

    這個可能是 jdk 與 tomcat 版本不一致 導致的,可以嘗試升級tomcat版本,或者降低 /升級jdk版本。查找對應的版本再安裝嘗試一下。

    (在命令行中運行java -version 可以檢查當前JDK的版本)

    三、CATALINA_HOME,CATALINA_BASE的配置錯誤

    出現如下錯誤:

    解決辦法:

    在環境變量中刪除CATALINA_HOME,CATALINA_BASE的配置(如果沒有在環境變量里配置過,那么會自動采用bin目錄的父目錄)。

    或者把CATALINA_HOME、CATALINA_BASE設置為正確的TOMCAT目錄。

    環境參數正確會顯示如下圖:

    (“D:\tomcat”是我的tomcat文件路徑)

    四:端口已被占用

    端口已被占用(我簡單以80端口為例,請根據實際情況判斷)

    Error:Address already in use: JVM_Bind :80

    比如:如果你先單獨打開了tomcat,又試圖在eclipse或IDEA里啟動它,相當于是啟動兩次,當然端口會被占用了。

    解決辦法:

    在運行中輸入cmd:

    輸入:netstat -ano|findstr “80” 查看 端口號包含"80"的占用情況(如圖有三個端口同時開啟)

    輸入:tasklist|findstr “1828” 查找端口使用者(為java.exe)

    輸入taskkill /f /t /im java.exe 終止對應進程

    五、缺少APR

    出現如下:

    The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:

    出現這種情況是這表示沒有找到APR。

    解決辦法:

    去 http://tomcat.heanet.ie/native/ 下載編譯好的tcnative-1.dll文件拷貝至jdk\bin下,再啟動就可以成功加載APR了。

    (在我給的Tomcat資源里面有:https://download.csdn.net/download/june_anlanruoshui/10826865)

    六:JDK不兼容

    出現如下:

    NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

    JDK不兼容:解決辦法同第二點,檢查tomcat和JDK版本

    七、持久化異常

    出現Exception loading sessions from persistent storage

    該問題的原因是tomcat的session持久化機制引起的,在%TOMCAT%/work/Catalina/localhost/session.ser 這個文件里,因為tomcat非正常關閉,所以這個文件沒有正確地結束(無EOF標記)

    解決辦法:

    1、只需要刪除 session.ser文件即可。

    2、關閉tomcat的持久化功能,就能一勞永逸的解決這個問題。具體為修改conf下的server.xml文件。在項目的context間加入一句代碼

    八、給tomcat指定特定的JDK

    修改bin文件夾下面的setclasspath.bat文件

    set “JRE_HOME=%JAVA_HOME%”

    修改為:

    set “JRE_HOME=E:\Java\jdk1.8.0.65”

    (根據自己的JDK路徑修改)

    九、修改端口:

    打開…\conf\server.xml

    修改“8080”處端口號(tomcat默認端口為8080)

    十、利用tomcat部署:

    將項目文件放入tomcat\webapps\ROOT

    (此處簡單以test.html為例)

    如出現404錯誤:請檢查文件是否存在/端口是否正確/環境變量是否無誤/Tomcat是否啟動/訪問資源和文件名是否正確……等

    推薦閱讀:美團架構師:這是為止把Tomcat講解的最詳細的一份文檔

    前言

    Tomcat 服務器是一個開源的輕量級Web應用服務器,在中小型系統和并發量小的場合下被普遍使用,是開發和調試Servlet、JSP 程序的首選。相信大家對于 Tomcat 已經是非常熟悉了,本篇將介紹tomcat的常見優化。那么為什么要對tomcat進行優化呢。因為Tomcat默認參數是為開發環境制定,而非適合生產環境,尤其是內存和線程的配置,默認都很低,容易成為性能瓶頸。相信大家看完這篇博客,會有一定的收獲。

    Tomcat連接器協議優化

    Tomcat 連接器的三種方式: bio、nio 和 apr,三種方式性能差別很大,apr 的性能最優, bio 的性能最差。而 Tomcat 7 使用的 Connector 默認就啟用的 Apr 協議,但需要系統安裝 Apr 庫,否則就會使用 bio 方式。

    nio如何配置

    進入到tomcat的server.xml找到connector。更改其中的protocol屬性即可。

    apr如何配置

    apr的配置需要安裝依賴

    yum -y install openssl-devel
    yum -y install apr-devel

    安裝之后,去tomcat官網下載native組件,native可以看成是tomcat和apr交互的中間環節,下載地址是:http://tomcat.apache.org/download-native.cgi 這里下載最新的版本1.2.10解壓并安裝

    tar -xvzf tomcat-native-1.2.10-src.tar.gz
    cd tomcat-native-1.2.10-src/native/
    ./configure

    至此apr安裝成功,進入server.xml。更改協議將默認的protocol="HTTP/1.1"修改為protocol="org.apache.coyote.http11.Http11AprProtocol"。

    Tomcat配置文件方面的優化

    配置文件方面是我們主要的tomcat優化的地方。我們將常見的優化直接在配置文件中放置。

    1. connectionTimeout="30000":網絡連接超時,單位:毫秒,設置為 0 表示永不超時,這樣設置有隱患的。通常可設置為 30000 毫秒,可根據檢測實際情況,適當修改
    2. enableLookups="false":是否反查域名,以返回遠程主機的主機名,取值為:true 或 false,如果設置為false,則直接返回IP地址,為了提高處理能力,應設置為 false。
    3. disableUploadTimeout="false":上傳時是否使用超時機制。
    4. connectionUploadTimeout="150000":上傳超時時間,畢竟文件上傳可能需要消耗更多的時間,這個根據你自己的業務需要自己調,以 使Servlet有較長的時間來完成它的執行,需要與上一個參數一起配合使用才會生效。
    5. acceptCount="300":指定當所有可以 使用的處理請求的線程數都被使用時,可傳入連接請求的最大隊列長度,超過這個數的請求將不予處理,默認為100個。
    6. keepAliveTimeout="120000":長連接最大保持時間(毫秒),表示在下次請求過來之前,Tomcat 保持該連接多久,默認是使用 connectionTimeout 時間,-1 為不限制超時。
    7. maxKeepAliveRequests="1":表示在服務器關閉之前,該連接最大支持的請求數。超過該請求數的連接也將被關閉,1表示禁用,-1表示不限制個數,默認100個,一般設置在100~200之間。
    8. compression="on":是否對響應的數據進行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off,壓縮數據后可以有效的減少頁面的大小,一般可以減小1/3左右,節省帶寬。
    9. compressionMinSize="2048":表示壓縮響應的最小值,只有當響應報文大小大于這個值的時候才會對報文進行壓縮,如果開啟了壓縮功能,默認值就是2048。
    10. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png":壓縮類型,指定對哪些類型的文件進行數據壓縮。
    <Connector executor="tomcatThreadPool"
    
    port="8080" protocol="HTTP/1.1"
    
    URIEncoding="UTF-8"
    
    connectionTimeout="30000"
     //網絡連接超時,單位:毫秒,設置為 0 表示永不超時,這樣設置有隱患的。通常可設置為 30000 毫秒,可根據檢測實際情況,適當修改
    
    enableLookups="false"
    //是否反查域名,以返回遠程主機的主機名,取值為:true 或 false,如果設置為false,則直接返回IP地址,為了提高處理能力,應設置為 false。
    
    disableUploadTimeout="false"
    //上傳時是否使用超時機制。
    
    connectionUploadTimeout="150000"
    //上傳超時時間,畢竟文件上傳可能需要消耗更多的時間,這個根據你自己的業務需要自己調,以使Servlet有較長的時間來完成它的執行,需要與上一個參數一起配合使用才會生效。
    
    acceptCount="300"
    //指定當所有可以使用的處理請求的線程數都被使用時,可傳入連接請求的最大隊列長度,超過這個數的請求將不予處理,默認為100個。
    
    keepAliveTimeout="120000"
    //長連接最大保持時間(毫秒),表示在下次請求過來之前,Tomcat 保持該連接多久,默認是使用 connectionTimeout 時間,-1 為不限制超時。
    
    maxKeepAliveRequests="1"
    //表示在服務器關閉之前,該連接最大支持的請求數。超過該請求數的連接也將被關閉,1表示禁用,-1表示不限制個數,默認100個,一般設置在100~200之間。
    
    compression="on"
    //是否對響應的數據進行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off,壓縮數據后可以有效的減少頁面的大小,一般可以減小1/3左右,節省帶寬。
    
    compressionMinSize="2048"
    //表示壓縮響應的最小值,只有當響應報文大小大于這個值的時候才會對報文進行壓縮,如果開啟了壓縮功能,默認值就是2048。
    
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
    //壓縮類型,指定對哪些類型的文件進行數據壓縮。
    
    redirectPort="8443" />

    Tomcat的jvm方面的優化

    找到catalina.sh在文件開頭增加如下設置:JAVA_OPTS=’-Xms256m-Xmx512m’

    -Xms:表示 Java 初始化堆的大小,-Xms 與-Xmx 設成一樣的值,避免 JVM 反復重新申請內存,導致性能大起大落,默認值為物理內存的 1/64,默認(MinHeapFreeRatio參數可以調整)空余堆內存小于 40% 時,JVM 就會增大堆直到 -Xmx 的最大限制。

    -Xmx:表示最大 Java 堆大小,當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,并且導致應用服務崩潰,因此一般建議堆的最大值設置為可用內存的最大值的80%。如何知道我的 JVM 能夠使用最大值,使用 java -Xmx512M -version 命令來進行測試,然后逐漸的增大 512 的值,如果執行正常就表示指定的內存大小可用,否則會打印錯誤信息,默認值為物理內存的 1/4,默認(MinHeapFreeRatio參數可以調整)空余堆內存大于 70% 時,JVM 會減少堆直到-Xms 的最小限制。

    -Xss:表示每個 Java 線程堆棧大小,JDK 5.0 以后每個線程堆棧大小為 1M,以前每個線程堆棧大小為 256K。根據應用的線程所需內存大小進行調整,在相同物理內存下,減小這個值能生成更多的線程,但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在 3000~5000 左右。一般小的應用, 如果棧不是很深, 應該是128k 夠用的,大的應用建議使用 256k 或 512K,一般不易設置超過 1M,要不然容易出現out ofmemory。這個選項對性能影響比較大,需要嚴格的測試。

    -XX:NewSize:設置新生代內存大小。

    -XX:MaxNewSize:設置最大新生代新生代內存大小

    -XX:PermSize:設置持久代內存大小

    -XX:MaxPermSize:設置最大值持久代內存大小,永久代不屬于堆內存,堆內存只包含新生代和老年代。

    -XX:+AggressiveOpts:作用如其名(aggressive),啟用這個參數,則每當 JDK 版本升級時,你的 JVM 都會使用最新加入的優化技術(如果有的話)。

    -XX:+UseBiasedLocking:啟用一個優化了的線程鎖,我們知道在我們的appserver,每個http請求就是一個線程,有的請求短有的請求長,就會有請求排隊的現象,甚至還會出現線程阻塞,這個優化了的線程鎖使得你的appserver內對線程處理自動進行最優調配。

    -XX:+UseConcMarkSweepGC:設置年老代為并發收集,即 CMS gc,這一特性只有 jdk1.5后續版本才具有的功能,它使用的是 gc 估算觸發和 heap 占用觸發。我們知道頻頻繁的 GC 會造面 JVM的大起大落從而影響到系統的效率,因此使用了 CMS GC 后可以在 GC 次數增多的情況下,每次 GC 的響應時間卻很短,比如說使用了 CMSGC 后經過 jprofiler 的觀察,GC 被觸發次數非常多,而每次 GC 耗時僅為幾毫秒。

    -XX:+UseParNewGC:對新生代采用多線程并行回收,這樣收得快,注意最新的 JVM 版本,當使用 -XX:+UseConcMarkSweepGC 時,-XX:UseParNewGC 會自動開啟。因此,如果年輕代的并行 GC 不想開啟,可以通過設置 -XX:-UseParNewGC 來關掉。

    -XX:MaxTenuringThreshold:設置垃圾最大年齡。如果設置為0的話,則新生代對象不經過 Survivor 區,直接進入老年代。對于老年代比較多的應用(需要大量常駐內存的應用),可以提高效率。如果將此值設置為一 個較大值,則新生代對象會在 Survivor 區進行多次復制,這樣可以增加對象在新生代的存活時間,增加在新生代即被回收的概率,減少Full GC的頻率,這樣做可以在某種程度上提高服務穩定性。該參數只有在串行 GC 時才有效,這個值的設置是根據本地的 jprofiler 監控后得到的一個理想的值,不能一概而論原搬照抄。

    -XX:+UseCMSCompactAtFullCollection:在使用 concurrent gc 的情況下,防止 memoryfragmention,對 live object 進行整理,使 memory 碎片減少。

    -XX:+UseFastAccessorMethods:使用 get,set 方法轉成本地代碼,原始類型的快速優化。

    -Djava.awt.headless=true:這個參數一般我們都是放在最后使用的,這全參數的作用是這樣的,有時我們會在我們的 J2EE 工程中使用一些圖表工具如:jfreechart,用于在 web 網頁輸出 GIF/JPG 等流,在 winodws 環境下,一般我們的 app server 在輸出圖形時不會碰到什么問題,但是在linux/unix 環境下經常會碰到一個 exception 導致你在 winodws 開發環境下圖片顯示的好好可是在 linux/unix 下卻顯示不出來,因此加上這個參數以免避這樣的情況出現。

    -Xmn:新生代的內存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與 jmap -heap 中顯示的 New gen 是不同的。整個堆大小 = 新生代大小 + 老生代大小 + 永久代大小。在保證堆大小不變的情況下,增大新生代后,將會減小老生代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的 3/8。

    -XX:NewRatio:年輕代(包括 Eden 和兩個 Survivor 區)與年老代的比值(除去持久代),-XX:NewRatio=4 表示年輕代與年老代所占比值為 1:4,年輕代占整個堆棧的 1/5,Xms=Xmx 并且設置了 Xmn 的情況下,該參數不需要進行設置。

    -XX:SurvivorRatio:Eden 區與 Survivor 區的大小比值,設置為 8,表示 2 個 Survivor 區(JVM 堆內存年輕代中默認有 2 個大小相等的 Survivor 區)與 1 個 Eden 區的比值為 2:8,即 1 個 Survivor 區占整個年輕代大小的 1/10。

    -XX:+UseSerialGC:設置串行收集器。

    -XX:+UseParallelGC:設置為并行收集器。此配置僅對年輕代有效。即年輕代使用并行收集,而年老代仍使用串行收集。

    -XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集,JDK6.0 開始支持對年老代并行收集。

    -XX:OldSize:設置 JVM 啟動分配的老年代內存大小,類似于新生代內存的初始大小 -XX:NewSize。

    Tomcat的字符集配置優化

    Tomcat 的語言編碼,配置起來很慢,要經過多次設置才可以了,否則中文很有可能出現亂碼情況。譬如漢字“中”,以 UTF-8 編碼后得到的是 3 字節的值 %E4%B8%AD,然后通過 GET 或者 POST 方式把這 3 個字節提交到 Tomcat 容器,如果你不告訴 Tomcat 我的參數是用 UTF-8編碼的,那么 Tomcat 就認為你是用 ISO-8859-1 來編碼的,而 ISO8859-1(兼容 URI 中的標準字符集 US-ASCII)是兼容 ASCII 的單字節編碼并且使用了單字節內的所有空間,因此 Tomcat 就以為你傳遞的用 ISO-8859-1 字符集編碼過的 3 個字符,然后它就用 ISO-8859-1 來解碼。

    設置起來不難使用“ -D<名稱>=<值> ”來設置系統屬性:

    -Djavax.servlet.request.encoding=UTF-8

    -Djavax.servlet.response.encoding=UTF-8

    -Dfile.encoding=UTF-8

    -Duser.country=CN

    -Duser.language=zh

    總結

    Tomcat優化到此結束,你現在懂了嗎?文中難免有不足,歡迎批評指正。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有