ฉันมีปัญหาอย่างต่อเนื่องในการใช้งานเว็บแอปพลิเคชัน Tomcat java ในคอนเทนเนอร์นักเทียบท่า (ซึ่งฉันเรียกว่า 'งาน' ในโพสต์นี้) ซึ่งโฮสต์ใน ECS (บริการคอนเทนเนอร์ยืดหยุ่น) บน AWS
เราสังเกตเห็นว่างานเพิ่มขึ้นถึง 97% ของการใช้งาน CPU (โดยใช้ตัววัด AWS) และในขณะที่บางครั้งงานนั้นไต่กลับลงไปที่การใช้งาน CPU ที่ต่ำกว่าด้วยตัวมันเอง งานโดยทั่วไปจะปิดตัวลง
โชคดีที่ ECS สร้างงานนักเทียบท่าใหม่และเริ่มต้นแอปพลิเคชันอีกครั้ง (แม้ว่าทุกอย่างจะใช้เวลา 5-10 นาทีกว่าทุกอย่างจะกลับมาออนไลน์ ซึ่งเป็นเวลาจำนวนมากในระหว่างวันผลิตของเรา!)
เราไม่มีขีดจำกัดบนของงาน ECS ที่กำหนดค่าไว้ (บางทีเราควรทำดีไหม) â â ในโครงการก่อนหน้านี้ เราได้เพิ่ม CPU บนโฮสต์ ECS จาก 8 vCPU เป็น 32 vCPU และนักเทียบท่าเฉพาะรายนี้นั่นเอง งานเพิ่มขึ้นเป็น 97% ของ CPU โฮสต์ ECS อย่างต่อเนื่องตลอดทั้งโครงการ
สัปดาห์นี้ เราเพิ่ม CPU จาก 8 vCPU เป็น 16 vCPU (และหน่วยความจำ 64 GB)
และกำลังเห็นสิ่งเดียวกัน ฉันเพิ่มขีดจำกัดหน่วยความจำแบบซอฟต์ของงานเป็น 4 GB (แต่เดิมกำหนดไว้ที่ 2 GB) และฉันเห็นว่าการใช้หน่วยความจำเพิ่มขึ้น แต่แน่นอนว่าไม่ได้เกิน 6 GB
ดำเนินการตามสแต็กเทรซ (ซึ่งยาวเกินไปที่จะโพสต์) ไม่มีข้อผิดพลาด Outof Memory ที่บันทึกโดยแอปพลิเคชัน tomcat/java
โดยปกติจะเริ่มต้นด้วยข้อผิดพลาด JDBC (การเชื่อมต่อสูงสุด / พูลหมด) จากนั้นสิ่งต่าง ๆ จะถูกยกเลิกการลงทะเบียน ระบบการบันทึกปิดลง ฯลฯ
โฮสต์ ECS ปิดงานหรืองานปิดตัวเองหลังจากถึงขีดจำกัด CPU/หน่วยความจำ (java/tomcat ปิดตัวเอง) หรือไม่ นอกจากนี้ ในบันทึกตัวแทน ECS ของเรา ฉันเห็นคำสั่งเกี่ยวกับ 'ทางออก 143' -- นี่เป็นการสิ้นสุดของงานจาก ECS หรือตัวคอนเทนเนอร์กำลังออก จะเป็นการดีที่สุดหรือไม่ที่จะตั้งค่าขีดจำกัดของ CPU บนงาน (เกี่ยวกับหน่วยความจำ JVM โดยใช้สิ่งที่มีอยู่)