Performance Tuning

  • 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.

Drupal.org มีเขียนถึงการปรับปรุงประสิทธิภาพของ Drupal.org พอดี

เลยมาเขียนแลกเปลี่ยนประสบการณ์กันหน่อย

ของ Blognone ผมใช้วิธีปิด search module แล้วใช้ผ่าน Google เหมือนกัน ส่วนเรื่อง physical หรือ sql tuning ยังไม่ได้ทำ เพราะไม่มีปัญหาเรื่อง CPU มากนัก แต่มีปัญหาเรื่อง b/w มากกว่าในตอนแรกๆ

ที่เคยทำก็

  • ใช้แคช (แบบ normal)
  • ลดความจำเป็นในการใช้รูปลง
  • ตัดบรรทัดฟุ่มเฟือยใน CSS ทิ้งให้หมด
  • ตอนแรกกะว่าจะจัดการกับ Js ด้วย แต่คิดว่าเวอร์ไป
  • ใช้ throttle กับบางโมดูล
  • เขียน .htaccess ให้ deny url บางตัวที่ยิงมาซ้ำๆ หรือเป็น url จากการเซฟเว้บเพจแบบ offline
  • โอน feed หลักไปไว้ที่ FeedBurner และปิด feed ของแต่ละ tag

ที่ยังไม่ได้ทำคือบีบ CSS แต่คิดว่าคงได้ทำละมั้ง เห็นใน High performace group ของ Drupal ใช้

  • memcache
  • squid
  • แยกสองเครื่อง เครื่องนึงเป็น Lighttpd สำหรับ static file (รูป) อีกเครื่องเป็น Apache สำหรับ CGI
sugree's picture

เท่าที่ทำตอนนี้

  • รวม css ให้เหลือไฟล์เดียว
  • ใส่ expires ให้ไฟล์เกือบทุกชนิด
  • เปิด mod_deflate
ipats's picture

mod_deflate เหมือนว่ามีปัญหากับ IE กะ proxy บางตัว มันไม่ยอมรับ
ผมเลยบีบ js บางตัวโดยใช้ packer ผลคือ ได้ไฟล์ที่เล็กลง
ไม่เปลืองแรงบีบ on fly แถมคนอ่านไม่ออกอีกด้วย :D

ส่วน expires ใส่ไว้สำหรับสคริป css และรูปเล็กๆ ต่างๆ (พวก bg/emo)
ประมาณสัปดาห์นึง (จริงๆ น่าจะเดือนนึงไปเลย ไม่เคยเปลี่ยนอยู่แล้ว)

เรื่องแยกเครื่อง ก็พอช่วยได้บ้าง
เครื่อง static ก็สามารถเปิด keep_alive ได้ด้วย ไว้โหลดรูปเล็กๆ เร็วดี
ส่วนเครื่อง cgi นี่คงไม่ต้องเปิด เปลือง slot :p

-----
iPAtS

sirn's picture

mod_deflate มันช้าอ่ะผมว่า ถ้าเทียบกับ ngx_http_gzip_module ของ Nginx เคยลองเปิดดูอยู่พักนึง Apache ค้างไปเลย…

sugree's picture

ไฟล์ใหญ่เหรอครับ ใช้กับพวก *.html *.js *.css ไม่น่าจะตายนะ

sirn's picture

ไฟล์ไม่ค่อยใหญ่น่ะครับ แต่เยอะพอสมควร ทำให้ load พุ่งขึ้นหนักมาก หลังจากนั้นเลยลองใช้ Nginx ดู ปรากฎว่าวิ่งได้สบายๆ ใช้ resource [ในการบีบไฟล์]น้อยกว่า Apache มาก

sugree's picture

อ๋อ ไฟล์เยอะ คนใช้เยอะ ว่าแต่ Nginx นี่ใช้กับพวก control panel ตัวไหนได้บ้างน้อ

sirn's picture

เห็นว่าใช้ไม่ได้เลยซักตัว ถือว่าเป็นข้อเสียที่สุด จากความ Lightweight ของมันเลย ข้อดีที่สุดเวลาใช้กับ Drupal ก็คือ rewrite ค่อนข้างละเอียดกว่า Lighttpd เลยไม่ต้องปวดหัวเวลาจะเซ็ท Clean URL

(เชียร์​ Nginx สุดใจ)

sugree's picture

เรื่อง static นี่กินขาด แล้ว php กับ fastcgi นี่ประสิทธิภาพเป็นไงมั่งครับ

sirn's picture

สารภาพเลยว่าไม่ได้ลองใช้ PHP กับ Nginx อย่างจริงๆ จังๆ เพราะคอนฟิคค่อนข้างยุ่งยาก แต่จากที่เขาลองรันเบนซ์มาร์คของ Rails+FastCGI ดู ถือว่าเร็วที่สุดจากตัวเลือกทั้งหมด (แต่ทางฝั่ง LiteSpeed มีคนมาเทสต์ พบว่า LiteSpeed เร็วกว่านิดหน่อย)

sugree's picture

วันไหนไม่ไหวเราจะใช้ mysql cluster

mk's picture

วันไหนไม่ไหวผมจะจ้าง sugree

sugree's picture

เฮ้ย แรงไป แค่บอกก็พอ ไม่ต้องจ้าง

jrp13th's picture

ไม่ไหวแล้วครับ :p

sugree's picture

ทำ mysql cluster ต้องเตรียมเครื่องอย่างน้อย 4 เครื่อง พร้อมแรมเยอะที่สุดเท่าที่งบประมาณจะเอื้ออำนวย

jrp13th's picture

เอ่อ... ขอบคุณครับ..
แต่ผม แซวขำๆ เฉยๆ นะครับ
แหะๆ ^ ^a

ipats's picture

กำลังสนใจเรื่อง high scalability อยู่เลยครับ :D

มีใครเคยลองเทียบ apache mod กับ fastcgi ดูบ้างเปล่าหรือครับว่าอันไหนเร็วกว่ากัน หรือว่าแล้วแต่ภาษา ตามเซ็นท์ (มั่วๆ) mod น่าจะเร็วกว่าแต่กินเมมเยอะกว่า หรือเปล่า?
(ตอนนี้ผมใช้ prefork ไม่รู้ว่าเปลี่ยนเป็น worker จะเร็วกว่าหรือเปล่าเนี่ย)

ว่าแต่.. วันนี้เพิ่งได้ฤกษ์ลองลง APC (php opcode cache) หวังว่าจะช่วยได้ :D

-----
iPAtS

sugree's picture

php ไม่ thread-safe ถ้าใช้ worker อาจจะเจอ deadlock ถี่ๆ ถ้ามาใช้ fastcgi ก็พอจะช่วยได้บ้าง แต่ที่ผมใช้อยู่จะเลี่ยงมาทาง prefork+eaccelerator หรือ prefork+apc จะง่ายกว่า สุดท้ายก็มาตันที่ mysql อยู่ดี

ย้าย Codenone

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

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