เนื่องด้วยประสบปัญหา 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 ข้อความ (รูปด้านล่างเป็นตัวอย่างตัวเลขไม่ตรงนะครับ)

directadmin-tickets

 

เมื่อลองคลิกเข้าไปดูก็ไม่ได้เพราะมันเยอะเกินและค้างในที่สุด เลยต้องทำการลดจำนวน 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 อื่นๆทำงานอยู่เช่นกัน ดังนั้นวิธีการแก้ไขก็ต้องตามเนื้องานที่เจอนะครับ

อ้างอิง http://help.directadmin.com/item.php?id=402

อ้างอิง http://help.directadmin.com/item.php?id=428