เนื่องด้วยประสบปัญหา CPU ทำงานหนัก 100% แทบจะทุกๆนาที ลำพัง MySql ทำงานก็มากพอแล้ว ก็เลย top ดูว่า process อะไรทำงานกิน cpu บ้าง ผลที่เจอคือมี “/usr/local/directadmin/dataskq” เป็นคิวการทำงานของ DirectAdmin ซึ่งทำงาน 50 – 99 % ตลอด ตอนแรกก็นึกว่าปกติเพราะ DirectAdmin จะมี cronjob ตั้งเวลาทำงานอยู่แล้ว ดูไปดูมาชักแปลกๆเพราะมันใช้บ่อยและเยอะเกินไปเลยตัดสินใจทำลาย process ของ dataskq และเข้าไปดู error log โดยใช้คำสั่งดังนี้
killall -USR1 dataskq
tail -n 10 /var/log/directadmin/errortaskq.log
เมื่อดู error log ก็น่าจะเปิดปัญหาเกี่ยวกับ tickets ที่ไม่สามารถทำงานได้ เพราะมีการ lock และค้าง
2015:05:16-09:21:04: removing old lock: ./data/admin/tickets.list.lock (age: 61 seconds)
2015:05:16-09:21:04: Ticket::deliverMessage::Can't read ./data/admin/tickets.list: Unable to get Lock on file:
file is locked by another process
2015:05:16-09:22:19: Dataskq USR1 signal: Currently processing: getlock(./data/admin/tickets.list) : finished
Tickets ถ้าเจ้าไปใน DirectAdmin จะเป็นลิงค์อยู่ในส่วนทางขวาบนเป็นลิงค์เขียนว่า Message System ซึ่งของผมพอไปดูมี tickets เยอะเกือบ 5,000 ข้อความ (รูปด้านล่างเป็นตัวอย่างตัวเลขไม่ตรงนะครับ)
เมื่อลองคลิกเข้าไปดูก็ไม่ได้เพราะมันเยอะเกินและค้างในที่สุด เลยต้องทำการลดจำนวน tickets.list โดยวิธีการมีดังนี้เข้าไปที่ DirectAdmin
cd /usr/local/directadmin/data/admin
หรือใช้คำสั่งนี้สำหรับผู้ใช้ ให้เปลี่ยน
cd /usr/local/directadmin/data/users/username
ทำการสำรองไฟล์ tickets.list เป็น tickets.list.backup
cp tickets.list tickets.list.backup
และนำข้อมูล 500 ข้อความล่าสุดจาก tickets.list.backup ไป tickets.list
tail -n 500 tickets.list.backup > tickets.list
ส่วน tickets.list.backup จะลบหรือไม่ก็ได้ ถ้าลบก็ตามคำสั่งด้านล่างครับ
rm tickets.list.backup
พอมาดู CPU อีกทีกลับมาเป็นปกติชีวิตดี๊ดีขึ้นมาทันที หวังว่าคงมีประโยชน์สำหรับผู้ที่มีปัญหาเช่นนี้เหมือนกันครับ แต่ dataskq นั้นมันมี process อื่นๆทำงานอยู่เช่นกัน ดังนั้นวิธีการแก้ไขก็ต้องตามเนื้องานที่เจอนะครับ
บทความจาก www.memo8.com
อ้างอิง http://help.directadmin.com/item.php?id=402
อ้างอิง http://help.directadmin.com/item.php?id=428