- ซึ่งโดยทั่วไปก็คือ บริหาร IO ดีๆ ใส่ RAM เยอะๆ
- CPU แรงๆ ไม่มีค่อยมีผลต่างกันมากมายเท่ากับ Resouce ที่มีให้ใช้ครับ นอกจากว่าเป็นการทำงานในลักษณะประมวลผลทางด้าน CGI มากๆ ควรให้ความสำคัญด้านนี้ด้วย แต่ไม่มากเท่า RAM และ CPU ในความเร็วใกล้เคียงกัน แทบจะไม่มีผลแตกต่างกันมาก (ช่วยได้ไม่ถึง 10%) เพราะงานหลักของ httpd เน้นการบริหาร resouce ไม่ได้เน้นการคำนวณคณิตศาสตร์ CPU จึงหนักไปทางบริหาร process ของ OS มากกว่า และถ้า CPU ยัง มี usage ไม่ถึง 100% (หรือใกล้เคียง) ก็แปลว่า มันยังทำงานไหวครับ เพราะการที่ CPU ทำงานมาก แสดงว่า ต้องคำนวณมาก แต่มีผลน้อยกว่า IO ทำงานหนักครับ
- RAM ควรมีอย่างต่ำ 512 MBขึ้นไป แต่ว่าผมแนะนำ ที่ 1 GB อยากให้ยอมลด CPU เพื่อแรม ว่างั้นเถอะ เพราะเราทำให้ขั้นตอนประมวลผลทำงานได้เร็วขึ้นข้อมูลไม่คับคั้งมากจนเกินไป พร้อมที่จะดึงข้อมูลที่ใช้บ่อยๆ ก็เก็บใน RAM มาใช้ได้เร็วกว่า HD มาก ทำให้ระบบโดยรวมเสถียร์มากขึ้น การทำระบบ SWAP ต่างๆ ไม่ควรเกิน กว่า 60% จาก ความจุแรมเพราะไม่เสถียรและเปลี่ยงพื้นที่ HD โดยไม่จำเป็น
- HD ควรเป็น Ultrawide SCSI 10000 rpm ขึ้นไป ควรใช้ SCSI ครับ คนทำงานเป็น admin ชอบ SCSI เพราะมันไม่ค่อยเกเร และไม่ค่อยมีปัญหา + ทนทาน + ตอบสนองเร็ว + เหมาะกับระบบ multi user ถ้ามีงบน้อย จะใช้ HD IDE ผมก็แนะนำให้ใช้ HD IDE 2 ตัวขึ้นไป สำหรับ กระจายงาน + backup กันเอง โดยทั่วไป ระบบที่เน้นความสเถียรภาพสูงๆ มักจะต้องทำ raid ด้วย เพราะข้อมูลสำคัญมากๆ พังไม่ได้เด็ดขาด
- Network Card ก็ควรใช้ของดีๆ โดยทั่วไป นิยมของดังๆ เช่น Intel, 3COM เอาแบบ 100 MBit ไปเลยครับ
- Apache ก็ลง mod เท่าที่จำเป็น เพราะจะได้ไม่อ้วนมาก เวลาแตก process เยอะๆ
- Optimized WebserServer เท่าที่จะทำได้เช่น ลง Zend Optimizer/Accerator , mod_gzip, phpa (Cache), etc
- หมั่น Upgrade Apache บ่อยๆ เพราะรุ่นใหม่ๆ มักจะทำงานและมี security ดีกว่ารุ่นก่าๆ
- อย่าลืมว่า mysql (database server) ก็กินแรงเครื่องค่อนข้างเยอะเหมือนกัน ถ้ามีงบพอ อาจจะแยกเป็น database server ต่างหาก ลงแต่ mysql อย่างเดียวไปเลย (spec เครื่องปานกลาง)
- mysql บางรุ่น มีปัญหา+bug เช่น connection เต็มบ่อย และไม่คืนให้ ต้อง reboot เครื่องบ่อย ดังนั้น ต้องหมั่น upgrade อีก
- บริหาร logs ไฟล์ ให้ดี โดยแยกให้เขียนลงคนละ mount volume หรือคนละ HD กัน เพราะลดการทำงานของ IO และ หมั่นลบ หรือ rotate log ไฟล์ เพราะถ้า logไฟล์โตมากๆ จะทำให้การอ่านเขียนช้าลงไปเยอะ ส่งผลต่อความเร็วโดยรวม ซึ่งส่งผลให้การทำงานหลักๆ ล่มได้ง่าย
- โดยหน้าที่ของ web admin/system admin คือ หมั่นศึกษา สังเกตุ และหาความรู้ในเรื่องที่เกี่ยวข้องอยู่เสมอ เพื่อให้ระบบทำงานได้เต็มประสิทธิภาพ และ มีปัญหาน้อยๆ
- ควร ติดตามข่าวสาร และ upgrade ระบบบ่อยๆ โดยเฉพาะปัญหา security
- email server ให้ระวังการโดนแอบใช้เป็น spam gateway และพยายามหลีกเลี่ยงการให้บริการ smtp แก่บุคคลภายนอก ซึ่งอาจทำได้ โดยการ lock ip หรือ ใช้การทำการตรวจสอบ password ก่อนส่ง
- กำหนด Firewalls ป้องกันการกระหน่ำ ping icmp /DDOS ซึ่งทำให้ระบบล่มได้
สาเหตุที่ webserver ทั่วไปๆ จะทำงานช้า อืด ไม่ได้ดังใจเจ้าของเวปทั้งหลาย ก็มีสาเหตุหลักๆ ไม่กี่อย่าง คือ
- webserver ตอบสนองไม่ทัน request process และ มี process ค้างในระบบมากมาย ทำให้ process ใหม่ๆ ที่ร้องขอเข้ามา ต้องรอเข้าคิว (ทำให้รู้สึกช้า) เพราะ server ระบายงานไม่ทัน
- ถ้าพูดถึง load หนักๆ แน่นอนว่า อุปกรณ์ที่ใช้ ก็ต้องทนทานอย่างหนาตราช้าง ไม่งั้น ไม่กี่ยกก็จอดครับ โดยเฉพาะ harddisk และไฟล์ขนาดใหญ่ ควรจะหนัก harddisk มากกว่านะครับ เพราะ cpu ทำหน้าที่คำนวณ ไม่ได้ทำหน้าที่เขียนอ่านไฟล์
- หน่วยความจำที่ต้องเผื่อไว้สำหรับ process httpd จำนวนมากๆ นั้น ต้องมีให้เพียงพอ ผมไม่เคยเห็น webserver ที่รองรับงานหนักๆ ตัวไหน มีแรมน้อยกว่า 512 MB นอกจากว่า เวปนั้น จะมี "hello" คำเดียว แบบนั้นเอาแรม แค่ 64 MB ก็พอไหวครับ เร็วสุดยอด ไม่เชื่อลองดู 555
- การที่มี process ล้นระบบ พวก script ไม่ทำการย่อ code เลย
- การใช้ process จนหน่วยความจำไม่พอ (ต้องรอ process เก่าๆ เสร็จงานก่อน)
- แต่ละ process กินเวลานาน อาจเป็นเพราะ scritp ทำงานเยอะ+ช้า และ ไม่ optimized code ทางออกคือ ปรับเปลียน script ให้ทำงานได้เร็วขึ้น เช่น เปลี่ยน compiler เป็น php, servlet , etc (perl ไม่เหมาะกับงานหนักๆ เยอะๆ ยกเว้น mod_perl อันนี้เร็วสุดยอด แต่เขียนยาก) ควบคู่ไปกับการบริหารหน่วยความจำในข้อ1เพราะ cgi script ทั้งหลาย ที่คือ ตัวดี ที่ทำให้ CPU ทำงานมาก และเมื่อมีการ execute script มากๆ ระบบก็ทำงานหนักมากขึ้น ทั้ง cpu, ram , harddisk , io และ script สองสามบรรทัด ที่เขียนผิดพลาดหรือจงใจก็แล้วแต่ ก็ทำให้ server อืดได้นะครับ อย่าประมาท มีตัวอย่างให้เห็นมาบ่อยๆ ใครยังจำได้ว่า สมัยที่มีคนแกะ script 152 และดันเขียน loop พลาด ทำเอา server ตัวเองล่มกันมาเยอะแล้ว
- optimized การใช้งานฐานข้อมูล งานบางอย่าง ถ้า insert ฐานข้อมูลหนักๆ ถี่ๆ ก็ทำให้ระบบช้าลงมากก และระบบรวนไปเลยก็มี ดังนั้น ถ้านำ text ไฟล์มาช่วยเบาภาระได้บ้าง ก็จะดีขึ้นมาก
- เร่งความเร็วของ script โดยใช้ engine ช่วย เช่น mod_perl, Zend Engine, Cache Engine, etc
- internet link ความเร็วต่ำ ระบาย bandwidth ได้น้อย จึงทำให้เกิดความคับคั่งของจราจรข้อมูล (รถติดนั่นแหละ) อันนี้เป็นปัญหาโลกแตก แก้ยาก และเปลืองเงินมาก นอกจากจะย้ายไปอยู่กับ data center ที่มี bandwidth มากๆ แทน
- แก้ปัญหาเบื้องต้นในระบบเดิม ด้วยตนเอง โดยการบีบอัดข้อมูล เช่น ติดตั้ง mod_gzip เพื่อบับอีด text/html ได้ถึง 80% เพื่อให้กิน bandwidth น้อยลง และจะทำให้ client รู้สึกว่าเร็วขึ้นมาก เนื่องจากความคับคั่งของจราจรลดลง
- เพิ่ม link bandwidth หรือ ย้าย ISP หรือ data center อันนี้ งบใครงบมันครับ แต่จะบอกว่า ต่อให้ server แรงสุดยอดแค่ไหน ถ้า link ช้า ทำยังไง ก็ไม่เร็วครับ เพราะมันคอขวดอยู่ตรงนั้น เหมือนเอา รถ F1 ไปติดแหงก อยู่บนถนน นะแหละครับ
- เวปเพจมีขนาดใหญ่ เนื่องจากภาพกราฟิกเยอะ ทำให้ต้องส่งข้อมูลจำนวนมหาศาลเมื่อมี process ร้องขอมากๆ จึงเป็นสาเหตุหนึ่งที่ทำให้ระบบตอบสนองได้ช้าา ทางแก้คือ ต้องลดๆ + บีบอัด กราฟิกกันหน่อย และการเขียนอ่าน IO มากๆ มีผลทำให้ harddisk ตอบสนองได้ช้า โดยเฉพาะการ write ดังนั้น ถ้า IO ไม่ตอบสนอง ได้ดีพอ ก็มีผลต่อความเร็วโดยรวม และ อายุการใช้งานก็สั้นลงด้วยครับ
อ้างอิงมาจาก : http://www.cgitop.com/phpBB2/viewtopic.php?t=602
บทความดีม๊าก ๆครับ
โอเคครับ
สุดยอดครับ ขอบคุณมากๆที่เขียน บทความดีๆๆ ขอให้เขียนบทความดีๆๆแบบนี้ต่อไปนะครับ
บทความนี้เป็นการรวบรวมมาและสรุปครับ คงต้องยกเครดิตให้กับคนเขียนคนแรกในเว็บ cgitop.com ครับผม
เยี่ยมมาก ขอบคุณครับ