RAM เต็มแก้ปัญหาแบบไม่ต้องรีบูตเครื่องหรือรีบูต apache วิธีนี้ง่ายสุดๆด้วยคำสั่ง

sync
echo 3 > /proc/sys/vm/drop_caches
วิธีที่เราเช็คว่า Ram หรือเยอะแค่ไหนก็ free -m หากเครื่อง server ใช้ Ram หมดแล้วจะวิ่งไปทำงานที่ swap แทนซึ่งนั้นก็หมายความว่าข้อมูลทุกอย่างถูกเขียนบน Harddisk ปัญหาต่อมาจะทำให้ IO ของเครื่องสูง ซึ่งนั่นก็เป็นสาเหตุของเว็บช้าและ server ล่มตามมา วิธีแก้ปัญหาหากคุณอยู่หน้าเครื่องและคอย monitor ดูตลอดมันก็ไม่มีปัญหาอะไร แต่ถ้าเราไม่อยู่ล่ะทำไง วันนี้ณเดชเอา shell script ง่ายๆมาฝากครับซึ่งเราสามารถตั้งได้ว่าจะให้ restart apache หรือ restart mysql เราก็เปลี่ยนจาก
sync
echo 3 > /proc/sys/vm/drop_caches
เป็นคำสั่ง restart apache เช่น
/etc/init.d/mysqld restart
ก็ได้เช่นกันครับแต่ในตัวอย่างนี้คือจะเคลียร์ไฟล์แคสของระบบออกไปซึ่งก็จะได้แรมกลับคืนมาเหมือนเดิมครับ
ขั้นตอนแรกทำการสร้างไฟล์เพื่อเอาไว้ทำการรัน crontab จากตัวอย่างผมสร้างไฟล์ชื่อ restart_mem หลังจากนั้นก็ใส่ข้อความตามข้างล่างนี้แล้วทำการเชฟไฟล์แล้วเปลี่ยน permission เป็น 777
#!/bin/bash mem_lmt=7500 # Size in MB free_mem=$(free | grep "Mem:" | awk '{print $4}') free_mem=$((free_mem/1024)) #echo $free_mem if [ $free_mem -lt $mem_lmt ] then sync echo 3 > /proc/sys/vm/drop_caches echo "Apache and MySQL restarted on `date +'%Y-%m-%d %H:%M:%S'`. Available RAM is " $free_mem "MB" >> /var/log/memchecker.log else echo "memory status is safe and free memory is " $free_mem "MB" fi
mem_lmt=7500 สามารถแก้ไขในส่วนนี้ได้เพราะว่าแต่ล่ะเครื่อง memnory ไม่เท่ากันครับ ตัวนี้มี 8G ครับ
ขั้นตอนต่อมาทำการสร้าง crontab เพื่อทำการรันไฟล์ด้วยคำสั่ง
crontab -e
*/10 * * * * /usr/local/admtools/restart_mem
หลังจากนั้นก็ตั้งเวลาใส่พาทให้ถูกต้องเป็นอันจบขั้นตอนครับ เทคนิคนี้สามารถใช้งานได้ในหลายๆทางซึ่งอยู่ที่การจะนำไปใช้นะครับ ขอให้โชคดี
หมายเหตุ เลือกใช้ได้เลยอยากได้แบบไหน
1. Free pagecache
$ echo 1 > /proc/sys/vm/drop_caches
2. Free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
3. Free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches




Posted in
Tags: