มีเทคนิคในการ Optimize Drupal มั๊ยครับ ผมว่าของผมมันหน่วงๆ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

พอเริ่มเปิดให้มาใช้งานมาสมัครสมาชิกกัน รู้สึกว่ามันหน่วงๆ ค้างๆ
พอ restart ทีนึงก็จะเร็วขึ้นมาพักนึง ใช้ๆไปก็ค้างๆอีก

ตอนนี้เลยให้ cron มันจัดการ restart เป็นระยะๆแทน ซึ่งผมว่าไม่น่าใช่วิธีที่พึงกระทำเท่าไหร่ -_-"

FreeBSD blog.hotwave.fm 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sun May 7 04:32:43 UTC 2006 root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

sugree's picture
  1. จูน apache
  2. จูน mysql
  3. ปิดโมดูล statistics
  4. เปิด cache

ผมลองเข้า http://blog.hotwave.fm/ แล้วมีอาการช้าอย่างเห็นได้ชัด แบบนี้ไม่ใช่แค่หน่วงแล้วละครับ ต้องมีอะไรแปลกๆ แน่

เมื่อกี๊อยู่ๆ ก็เร็วขึ้น คาดว่าได้รับการรีสตาร์ตไปหน่อย ไม่ทราบว่ารีสตาร์ตอะไรครับ apache?

ตอนนี้ restart apache ไปหนะคับ ด้วย apachectl restart

ในส่วนของ ข้อ 3 กับ 4 นี่ผมทำไว้แล้วแต่ก็ยังเป็นอย่างที่คุณ sugree เจอหนะครับผม มันอืดดดดไปเลยครับผม

apache นี่ผมกำหนดไว้

MaxRequestsPerChild 20000
MaxSpareServers 256
MinSpareServers 100
StartServers 60

ตัว MaxRequestsPerChild นี่น่าจะปรับค่าลดลงมาดีป่าวครับผม

mysql นี่ยังไม่เคยจูนเลยครับ ไม่มีประสบการณ์กับมันเลย เริ่มต้นอย่างไรดีครับ T T

sugree's picture

ลองเช็คค่าทั่วๆ ไปก่อนดีกว่าครับ ผมสังหรณ์ว่าแรมไม่พอ เริ่มจาก ps vmstat memstat และอื่นๆ อะไรก็ได้

www2# w
4:24PM up 317 days, 3:18, 1 user, load averages: 0.27, 0.38, 0.54
USER TTY FROM LOGIN@ IDLE WHAT

www2# ps uawx
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 11 94.0 0.0 0 8 ?? RL 20Jun06 428112:01.01 [idle]

ไอ้ process [idel] ตัวนี้ทำไมมันใช้ CPU เยอะจัง อื่มๆๆๆ

www2# top

last pid: 83282; load averages: 0.00, 0.17, 0.41 up 317+03:22:33 16:28:08
271 processes: 1 running, 270 sleeping
CPU states: 1.1% user, 0.0% nice, 0.0% system, 0.0% interrupt, 98.9% idle
Mem: 342M Active, 94M Inact, 163M Wired, 18M Cache, 73M Buf, 2436K Free
Swap: 1255M Total, 1238M Used, 17M Free, 98% Inuse

แรมมันเหลือ 2M เองแฮะครับ

sugree's picture

โอ้โน้ ใช้ swap 98% น่ากลัวมาก

ตอนนี้ปรับ apache conf ใหม่คับ

MaxRequestsPerChild 500
MaxSpareServers 100
MinSpareServers 20
MaxClients 150
StartServers 50

แล้วลอง top ดูมันจะเป็น

last pid: 83450; load averages: 5.01, 2.11, 1.11 up 317+03:28:07 16:33:42
106 processes: 1 running, 105 sleeping
CPU states: 0.4% user, 0.0% nice, 1.1% system, 0.4% interrupt, 98.1% idle
Mem: 52M Active, 8092K Inact, 162M Wired, 280K Cache, 73M Buf, 397M Free
Swap: 1255M Total, 16M Used, 1239M Free, 1% Inuse

sugree's picture

แรม 512M เหรอครับ

แฮ่ คำสั่งดูแรมนี่พิมพ์ยังไงแล้วหนะครับ พอดีเครื่องนี้เอาไปตั้งไว้ปีกว่าแล้วเลยจำ spec ไม่ได้หนะครับผม

ผมคิดว่าตั้งค่าสูงเกินไปมากครับ

StartServers 5
MinSpareServer 5
MaxSpareServers 20

ก็น่าจะพอแล้วครับ ใช้ prefork ก็ดี แต่อย่าให้มากไปเพราะ sleep เกือบหมด ไม่ได้ใช้อยู่ดี เปลือง memory

รายงานผลครับ ผมปรับ apache ให้มี process ลดลง แรมก็เพิ่มขึ้น ทีนี้เร็วแล้วครับ

แต่พอใช้ไปซักพักสงสัยเริ่มมีคนเข้าเว็บเพิ่มขึ้น process apache ก็เลยเพิ่มขึ้น แรมก็ลดลง พอเริ่มแตะ swap มากขึ้น ก็เริ่มช้าอีกแล้ว
ก็เลยไปปรับ apache ให้ process ลดลงอีกจึ๋งครับ แล้วเดี๋ยวจะดูไปอีกสักพัก

ท่าทางซื้อแรมอัดเข้าไปน่าจะเอาอยู่รึเปล่าหนอ

sugree's picture

ดูแรมด้วย top หรือ vmstat หรือ memstat ก็ได้ครับ ผมว่าลดจำนวนโปรเซสของ apache ลงอีกน่าจะดีกว่านี้ไม่งั้นจะเกิดเหตุ thrashing แบบที่เป็นอยู่ น่ากลัวมาก

ขอบคุณครับ ท่าทางเครื่องนั้นจะเป็นแรม 512 จริงๆครับ และก็เอาไม่อยู่จริงๆครับ กับการใช้งานของเว็บผม เพราะน้องๆเขาจะเล่นกันแบบถี่มาก ภายใน 1 นาทีนี่โพสต์กันหลายข้อความเลย

ตอนนี้ลด process ของ apapche ลงมาอยู่ที่ 80 ใช้ swap ราวๆ 30% ท่าทางคงต้องลด process ลงไปอีก

เห็นทีต้องเอาเครื่อง Xeon ram 2G ไปบูชายัญใช้แทนเครื่องนี้ซะแล้ว

Drupal นี่เราเอาตัว php ไว้อีกเครื่องนึง แล้ว connect mysql ไปอีกเครื่องนึงได้มั๊ยครับ แบบว่าไม่ใช่ localhost หนะครับ

sugree's picture

แยก mysql ก็ดีครับ อืม ผมว่ามันอาจจะเกิดจาก php ใช้แรมมากไป ลองเช็คใน php.ini ว่าให้ memory_limit เท่าไหร่ โดยปกติ forum กับ blog ไม่น่าใช้เกิน 8M-16M

เอ๊ะ ถ้า 80 ยังต้องใช้ swap นี่แปลว่าอาจจะไปกินที่ mysql นะเนี่ย ถ้าแรมน้อยจริงๆ อาจจะเซ็ต apache ให้เป็นแบบ mpm worker จะช่วยประหยัดได้เยอะ แต่อาจจะต้องเจอกับปัญหาของ thread บน freebsd แทน ผมไม่แน่ใจว่าจะเป็นยังไงเหมือนกัน ครั้งสุดท้ายที่เซ็ต freebsd เจอปัญหาเยอะเลยเปลี่ยนเป็น ubuntu หมดแล้ว

uptime น่าประทับใจมาก เก็บไว้อีกสองเดือนก็ครบปี

คุณสุกรีมีข้อมูลไหมครับ
อย่าง blognone นี่ config apache process ไว้ที่จำนวนเท่าไร

sugree's picture

ต้องให้ mk กับ lew มาตอบครับ

mk's picture

นั่นสิครับ อันนี้ต้องถามลิ่ว (เป็น shared host น่ะครับ)

ตามนี้ครับ

StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น