Score:0

การปรับใช้ Tomcat ช้าบนเซิร์ฟเวอร์ Unix

ธง cn

เราเพิ่งย้ายไปยัง Tomcat จาก WebSphere สำหรับแอปพลิเคชันของเรา

เรากำลังใช้: JDK 1.8 สร้าง 191 และ ทอมแคท 9.0.50. แอปพลิเคชันส่วนใหญ่เป็นการผสมผสานระหว่าง Servlet / JSP และเว็บแอปบางส่วนที่มี Spring MVC ซึ่งใช้มัลติเธรด

ตอนนี้เซิร์ฟเวอร์ทดสอบของเราใช้งานได้ดีอย่างแน่นอน มันค่อนข้างมีกำลังใจ แต่เมื่อปรับใช้กับ Tomcat บน Production มันก็หยุดลงอย่างน่าใจหาย

ตัวอย่างเช่น นี่เป็นเอาต์พุตจากเซิร์ฟเวอร์ทดสอบ:

26 ส.ค. 2021 08:56:11.585 INFO [หลัก] org.apache.catalina.startup.HostConfig.deployWAR การปรับใช้ที่เก็บถาวรของเว็บแอปพลิเคชัน [/opt/app/tomcat/webapps/cdsrs.war]
26-ส.ค.-2021 08:56:13.750 INFO [หลัก] org.apache.jasper.servlet.TldScanner.scanJars มีการสแกน JAR อย่างน้อยหนึ่งรายการเพื่อหา TLD แต่ไม่มี TLD เปิดใช้งานการบันทึกดีบักสำหรับตัวบันทึกนี้สำหรับรายการทั้งหมดของ JAR ที่สแกนแต่ไม่พบ TLD การข้าม JAR ที่ไม่จำเป็นระหว่างการสแกนสามารถปรับปรุงเวลาเริ่มต้นและเวลาในการคอมไพล์ JSP
26 ส.ค. 2021 08:56:14.091 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR การปรับใช้ที่เก็บถาวรของเว็บแอปพลิเคชัน [/opt/app/tomcat/webapps/cdsrs.war] เสร็จสิ้นใน [2,505] นางสาว

และนี่คือเว็บแอปเดียวกันในการผลิต:

26-ส.ค.-2021 09:26:18.016 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory การปรับใช้ไดเรกทอรีเว็บแอปพลิเคชัน [/opt/app/tomcat/webapps/cdsrs]
26-ส.ค.-2021 09:26:19.870 INFO [Catalina-utility-1] org.apache.jasper.servlet.TldScanner.scanJars มีการสแกน JAR อย่างน้อยหนึ่งรายการเพื่อหา TLD แต่ไม่มี TLD เปิดใช้งานการบันทึกดีบักสำหรับตัวบันทึกนี้สำหรับรายการทั้งหมดของ JAR ที่สแกนแต่ไม่พบ TLD การข้าม JAR ที่ไม่จำเป็นระหว่างการสแกนสามารถปรับปรุงเวลาเริ่มต้นและเวลาในการคอมไพล์ JSP
26 ส.ค. 2021 09:28:52.569 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory การปรับใช้ไดเรกทอรีเว็บแอปพลิเคชัน [/opt/app/tomcat/webapps/cdsrs] เสร็จสิ้นใน [ 154,553] น

ฉันมีชุดนี้ในไฟล์ setenv.sh:

ส่งออก CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:gc/gc.log"
ส่งออก CATALINA_OPTS="$CATALINA_OPTS -Xms3072M"
ส่งออก CATALINA_OPTS="$CATALINA_OPTS -Xmx8192M"
ส่งออก CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=3072M"

และฉันได้กำหนดค่า server.xml ด้วย:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxHttpHeaderSize="65536" maxThreads="150" SSLEnabled="true" acceptorThreadCount="4" >
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks" certificateKeystorePassword="some_password" type="RSA" />
    </SSLHostConfig>
</Connector>
<Connector address="SERVER_HOSTNAME" port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="65536" connectionTimeout="20000" redirectPort="8443" acceptorThreadCount="4" />

และ เครื่องยนต์ แท็กที่ชอบ:

<Engine name="Catalina" defaultHost="localhost" startStopThreads="0">

ไม่ต้องพูดถึง แอปทำงานช้ามากเช่นกัน! เวลาในการโหลดเพจเพิ่มขึ้นประมาณ 200-300% ในขณะนี้ เมื่อเทียบกับเมื่อรันบน WebSphere ฉันพลาดอะไรไปหรือเปล่า ความช่วยเหลือในเรื่องนี้จะได้รับการชื่นชมจริงๆ ขอบคุณ!

cn flag
นอกจากนี้หากมีใครสามารถให้ความกระจ่างเกี่ยวกับ NIO และ NIO2 หากเปลี่ยนเป็น NIO2 จะช่วยปรับปรุงประสิทธิภาพได้เล็กน้อย
Michael Hampton avatar
cz flag
ในกรณีหนึ่ง คุณกำลังปรับใช้ไฟล์ WAR และอีกกรณีหนึ่ง (ใช้เวลานาน) คุณกำลังปรับใช้จากไดเร็กทอรี ทำไมความแตกต่าง?
cn flag
@MichaelHampton ทั้งสองกรณี ฉันกำลังปรับใช้ WAR บันทึกมาจากการเริ่มต้นเซิร์ฟเวอร์ ไฟล์ WAR มีอยู่แล้วในไดเร็กทอรี webapp ของ Tomcat ความแตกต่าง ฉันหวังว่าฉันจะบอกคุณได้ว่าเหตุผลคืออะไร! เครื่อง Unix ที่ผลิตนั้นแข็งแกร่งกว่าเครื่องทดสอบมาก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา