หนึ่งในปัญหาต่อเรื่อง performance ของระบบงาน
คือการเขียน log ของระบบงานลง file system !!
ซึ่งพบว่า ถ้าเปลี่ยนมาใช้การเขียน log แบบ Asynchronous จะดีกว่า Synchronous
เป็นเรื่องเล็ก ๆ ที่อาจจะส่งผลเยอะเช่นกัน
ดังนั้นลองมาปรับเปลี่ยนกันดู
โดยตัวอย่างเป็นการ config ใน Log4j นั่นเอง
[gist id="3a5919006d87c78453e6f0fb78045365" file="1.xml"]จากการทดสอบนั้น performance ดีขึ้น 50% กันเลย
รวมทั้งลดการใช้งาน memory ลงไป
ที่สำคัญไม่ไป block การทำงานบน main thread อีกด้วย
โดยใน Log4j นั้นจะใช้งาน Disruptor สำหรับ Asynchronous log
ดังนั้นเพิ่ม library ใน project ด้วย
แต่ปัญหาที่ตามมาคือ
- การ config ที่เยอะขึ้น รวมทั้งเปลี่ยนแนวคิดด้วย
- ลำดับของ log จะไม่สามารถควบคุมได้ ดังนั้นจะส่งผลต่อการนำ log ไปประมวลผลอื่น ๆ ต่อไป
Reference Websites
https://medium.com/@knowledge.cafe/async-logging-the-speed-boost-your-java-apps-d9d161ad1fe4