server มีปัญหาช้าสอบถามว่าผมวิเคราะห์ถูกหรือไม่ครับ

สวัสดีครับ

ผมกำลังเจอปัญหา server ที่ลง CenOS มันช้าเป็นบางช่วงและค้นหาข้อมูลในเน็ตปรากฎว่าได้แนวทางและเครื่องมือการวิเคราะห์จากบอร์ดนี้เยอะมากๆครับ (ขอบคุณพี่ๆทุกท่านครับ _/_)

นี่คือข้อมูลจาก server ผมที่ใช้คำสั่ง top ครับ

top - 12:54:55 up 289 days, 11:52, 1 user, load average: 75.25, 39.22, 20.72

Tasks: 655 total, 1 running, 646 sleeping, 1 stopped, 7 zombie

Cpu(s): 2.0%us, 1.2%sy, 0.0%ni, 0.0%id, 95.1%wa, 1.0%hi, 0.7%si, 0.0%st

Mem: 2066848k total, 2017784k used, 49064k free, 3716k buffers

Swap: 4128760k total, 2182912k used, 1945848k free, 267432k cached

การวิเคราะห์ของผม(แบบมือใหม่นะครับ)

  • ดู load average: 75.25, 39.22, 20.72 => เยอะมากรู้ล่ะว่าเวปเข้าไม่ได้เพราะ load สูงปี๊ด

  • ดู 95.1%wa => มี iowait สูงมากแสดงว่า hdd, การ์ดจอ, การ์ดแลนอย่างใดอย่างหนึ่ง(หรือหลายอย่าง)ทำงานตอบสนองไม่ทัน (เริ่มสงสัยว่าเป็นที่ hdd เปล่าประมาณว่าใกล้เสีย)

  • ดู Mem: 2066848k total, 2017784k used => มี 2G ใช้เต็ม 2G

  • ดู Swap: 4128760k total, 2182912k used => เข้าใจว่า ram หมดเลยมาขอใช้เนื้อที่ hdd อีก 2G

จากข้อมูลตรงนี้ผมสรุปว่า

เวปช้าเพราะ ram ไม่พอ แล้วที่ iowait ขึ้นสูงก็เพราะมันไปใช้ swap ซึ่งเป็นส่วนของ hdd มันก็เลยตอบสนองไม่ทัน

แนวทางแก้คือ เพิ่ม ram จาก 2G เป็น 4G

ที่ผมไม่ค่อยแน่ใจคือวิเคราะห์ตรง iowait ที่มันขึ้นสุงเพราะไปใช้ swap (ไม่แน่ใจว่า hdd มีปัญหาหรือเปล่า)

ผมเห็นของบางท่านที่มีปัญหา load สูงแล้ว capture มาให้ดูมีแรม 4G ใช้เต็มและยังเลยไปใช้ swap อีก 5G แต่ iowait ยังไม่ถึง 1% เลย

(ก็เลยสับสนว่าอาจเข้าใจผิดว่า iowait สูงเพราะไปใช้ swap เยอะ)

อีกอย่างนึงผมไม่แน่ใจว่าหลักการดูว่า load สูงเกินหรือเปล่า? ผมจะใช้ดูจำนวนคอร์ของ cpu เช่น server ผมใช้ cpu รุ่น intel i5-750 มันจะมี 4 คอร์ก็คือ load ไม่ควรเกิน 4

(แล้วที่เป็น i7 ผมเห็นมันมี 4 คอร์ 8 เทรด หมายถึง load ไม่ควรเกิน 8 หรือเปล่า?)

อีกอย่างนึงที่สงสัยบางทีผมเห็น linux บางครั้งมีแรมเท่าไหร่เริ่มต้นมามันก็ใช้เท่านั้นเลย(ยังไม่มีเวปเลย)งงว่าถ้างั้นจะรู้ได้ไงว่าใช้จริงเท่าไหร่บางทีเหมือนระบบมันจองเอาไว้ก่อน - -"

มันพอจะมีทูลอะไรที่ monitor load หรือ เก็บเป็นสถิตทั้งวัน (load history) จะได้รู้ว่าช่วงไหน load สูง หรือให้ส่งเมล์แจ้งบ้างไหมครับ

แล้วที่พี่ๆวิเคราะห์ออกมาจนเจอว่าเป็นที่ hdd เสียนี่ดูยังไง ใช้คำสั่งไหนหรอครับ

ขอความกรุณาแนะนำมือถือใหม่ด้วยครับ

ขอบคุณครับ _/_

49064k free, 3716k buffers, 267432k cached

ถ้าเริ่มกิน swap แสดงว่ามีปัญหาแล้วครับ

แต่กรณีที่กิน swap แล้ว iowait ไม่ขึ้น มันคือการกิน swap ค้างไว้ แต่ไม่มีการใช้งานครับ

ตัวเลขมันก้จะสูงแบบนั้นแหละ

ตามที่วิเคราะห์มาก็ถูกแล้ว แรมไม่พอจริงๆ

ทีนี้วิธีแก้ปัญหาก็ต้อง…

  • เพิ่มแรม

  • ลดการใช้แรม

อย่างใดอย่างหนึ่ง หรือทั้งสองอย่างครับ

กิน Swap แล้วแนะนำเพิ่มแรมครับ

ถ้า I7 ก็จะไม่ควรเกิน 8ครับ

HDD เช็คโดยการ SMART ดูครับ

เพิ้มแรมเลยครับ ถ้ามีงบอยู่บ้าง ใส่ไปเยอะๆ เลยครับ

เพิ่ม ram เป็น 8g แล้วจะดีขึ้นเยอะครับ

ขอบคุณพี่ๆทุกท่านมากครับ _/_ ทำให้ผมเข้าใจและมั่นใจขึ้นเยอะเลยครับ

(ผมมือใหม่เพิ่งจับเรื่อง system ปกติพัฒนาเวปไซต์ & เขียนโปรแกรม พอมาเจอเรื่อง resource ไม่พอเลยมึนๆไปไม่ค่อยถูก)

+1 ให้กับการตั้งคำถามครับ บอกได้เลยว่าอนาคตเราจะมีเซียนเพิ่มอีกคนแน่นอน

น้อยคนที่จะไปไล่อ่านกระทู้เก่าๆ มาถึงก็ตั้งคำถามเลย

น้อยคนที่อ่านกระทู้เก่าอย่างจริงจัง สามารถเอามาช่วยวิเคราะห์ถึงสาเหตุและปัญหาของตนเองได้

น้อยคนที่จะตั้งกระทู้ แบบมีที่มาที่ไป มีข้อมูลค่อนข้างครบถ้วน อ่านแล้วช่วยตอบได้แบบไม่ต้องถามอะไรเพิ่มเติม

จากข้อมูลที่ให้มา และการวิเคราะห์ของคุณถูกต้องแล้วครับ

ปัญหาเริ่มจาก RAM หมด ระบบจึงไปนำ SWAP มาใช้

แต่เนื่องจาก SWAP อ่านเขียนได้ช้ากว่า RAM มากมาย

จึงทำให้การทำงานของระบบทำงานได้ช้ากว่าปกติ และเกิดการสะสมของงานที่รอคิว

เมื่อระบบทำงานไม่ทันมีคิวงานจำนวนมาก ค่าโหลดก็ขึ้นสูง

เนื่องจากขาดข้อมูลในส่วนของการใช้งานว่ามีการเรียกเว็บมากน้อยเท่าไหร่ และเป็นเว็บประเภทใหน

หากคุณพอทราบว่าเว็บของคุณคนเข้าเยอะหรือมันทำงานหนักจริงๆ การเพิ่ม RAM เป็นทางออกที่ดีที่สุด (การ optimize script ให้ใช้ RAM น้อยลงก็ช่วยให้รับจำนวนคนเข้าเว็บได้มากขึ้นโดยใช้ RAM เท่าเดิม แต่ถ้ายังเยอะเกินก็ต้องเพิ่ม RAM อยู่ดี)

แต่ถ้าหากคุณคิดว่าเว็บของคุณแทบไม่มีใครเข้า ไม่น่าจะโหลดหนักขนาดที่ว่า การแก้ไขก็น่าจะเป็นการหาว่าอะไรที่เป็นเหตุให้ระบบทำงานไม่ทันจน process ค้างจำนวนมากจน RAM หมดและไปใช้ SWAP