9 เครื่องมือตรวจสอบสถานะ server by heha

26
Feb
2

จากบทความที่แล้ว Newrelic เครื่องมือสำหรับ monitor server บน Cloud ขั้นเทพ เรามาดูกันต่อด้วย tools ที่เจาะลึกมากขึ้นผ่านทาง shell ดังนี้ครับ

  1. top เครื่องมือหากินที่มีติดมากับ server ทุกตัว ใช้ดู CPU, Memory ของแต่ละ process ได้ เพื่อสังเกตถึงความผิดปกติของ process และยังสั่ง kill process ได้อีกด้วย
  2. prstat -Z ตัวนี้คล้าย top แต่เอาไว้ใช้บน Solaris ครับ จะให้ข้อมูลที่เที่ยงตรงกว่า top แต่ถ้าเป็น linux ตระกูลอื่นก็ใช้ top นั่นแหละ
  3. ps -elf มี process อะไรรันอยู่บ้างด้วย command อะไร
  4. uptime ตรวจสอบว่าเครื่องนี้รันมาโดยไม่ล่มเป็นเวลากี่วันแล้ว
  5. df -h ใช้เช็คพื้นที่ harddisk ที่เหลือ เอาไว้ดูว่าเครื่อง server หรือเครื่อง database ของเราพื้นที่ใกล้เต็มหรือยัง
  6. apachetop -f <access_log_path> ใช้เช็คว่ามี URL ไหนที่ถูกรันถี่เป็นพิเศษ หรือมีการส่งข้อมูลมากเป็นพิเศษในขณะนั้น อันนี้รวมไปถึงถ้าโดนใครยิงถล่ม server ก็สามารถ monitor ได้เช่นกันว่ายิงมาจาก IP ไหน
  7. mysql -u<username> -p แม้แต่ตัวคำสั่ง mysql เองก็สามารถใช้ตรวจสอบสถานะของ Database ได้เช่นกัน หลังจากเราพิมพ์ mysql -uroot -p เข้ามาแล้ว สามารถรันคำสั่งต่างๆ ได้ เช่น
    1. SHOW PROCESSLIST; ใช้ดูสถานะ Query ของ mysql ในขณะนั้น ถ้า table โดน Lock บ่อยมากๆ เราจะเห็นสถานะ LOCK ค้างตอนรันคำสั่งนี้เป็นจำนวนมาก
    2. SHOW STATUS; ใช้ดูสถานะค่าต่างๆ ของ mysql ซึ่งมีอยู่มากมายมหาศาล อ่านรายละเอียดของค่าแต่ละตัวได้ที่นี่
  8. mytop -u <username> -p <password> -d <database_name> เมื่อเรามี top ใน server ก็ต้องมี mytop ใน mysql ตัวนี้เอาไว้ monitor สถานะปัจจุบันของ mysql ได้ทั้ง Query per sec, mysql รันมากี่วัน กี่ชั่วโมงโดยที่ไม่ล่มแล้ว, มีปริมาณ Select/Insert/Update/Delete ในขณะนั้นมากน้อยเพียงใด, มี slow query ไหม, Bytes per sec ฯลฯ มีประโยชน์มากครับ
  9. dtrace อันนี้มีเฉพาะใน Solaris แต่ขอบอกว่าเป็น Tools ที่เทพมากๆ ครับ โดยหากจะใช้เราควรไป Download Dtracetoolkit มา ถ้าใครเคยใช้ Firefox ก็คิอซะว่า Dtrace คือ greasemonkey และ Dtracetoolkit คือชุดของ script สำหรับรันจำนวนมากนั่นเอง ซึ่งภายใน toolkit จะมีหลากหลายภาษาการเขียนโปรแกรมมาให้เป็นจำนวนมาก วิธีใช้จะต้องลง extension ของภาษานั้นๆ เช่นจะใช้งาน dtrace สำหรับ php ต้องลง pecl install dtrace เสียก่อน จึงจะสามารถรัน script ที่ download มาได้ เมื่อรันแล้วจะมีข้อมูลหลายอย่างที่น่าสนใจเช่น function อะไรที่ class ไหนใช้เวลารันไปกี่วินาที รันไปกี่รอบ หรือแม้แต่กิน memory ไปเท่าไร ช่วยให้การหา bottleneck ของโปรแกรมว่าส่วนไหนของโปรแกรมทำงานช้าทำได้ง่ายมากๆ เพราะลงไปถึงระดับ function กันเลยทีเดียว อ่านรายละเอียดเพิ่มเติมได้ที่นี่

ก็ตามนี้ครับ list tools ช่วยตรวจสอบสถานะ server ใครมีปัญหาอะไรก็ลองรันดูเผื่อจะเจออะไรนะครับ tool ทุกตัวที่ผมแนะนำคิดว่าน่าจะมีอยู่ใน server อยู่แล้ว ไม่ต้องติดตั้งอะไรเพิ่มครับ ขอให้โชคดีครับ :)

Newrelic เครื่องมือสำหรับ monitor server บน Cloud ขั้นเทพ by heha

31
Jan
0

จากบทความที่แล้ว ทำไมเว็บไซต์ของคุณช้า หรือล่มบ่อย? อาจจะมีข้อสงสัยว่า “แล้วเราจะรู้ได้อย่างไรว่าเว็บเราช้าหรือล่มเพราะ Database, CPU หรือ Memory?” ผมก็ขอแนะนำเครื่องมือที่ช่วย Monitor server ให้กับทุกๆ คนครับ ที่สำคัญ Tools ตัวนี้ยังฟรีอีกด้วย!! (แต่ feature เทพๆ บางส่วนก็เสียตังนะ เหอๆ แต่โดยส่วนตัวแล้วมันช่วยได้เยอะจริงๆ นะผมว่า)

Tools ที่ว่าตัวนี้คือ Newrelic ซึ่งจะช่วยตรวจสอบ server ของเราและรายงานผลออกมาเป็นกราฟอย่างสวยงาม เข้าตรวจสอบได้ผ่านเว็บไซต์ ใช้งานง่ายมาก ไม่ต้องทนดู shell ดำๆ อ่านยาก และนอกจากนี้ยังไม่กินที่ server เราอีกต่างหาก เพราะข้อมูลที่ได้จะถูกส่งไปยัง cloud server ของทาง newrelic และเมื่อเราต้องการตรวจดูข้อมูล ก็เพียงแค่ login เข้าไปตรวจสอบเท่านั้น ซึ่ง Tools ตัวนี้เราจะต้องทำการติดตั้งตัวดักจับข้อมูลที่ server ของเรา ซึ่ง support ทั้งตัวภาษา .NET, Java, Ruby, PHP และ OS ที่ support ก็ครอบคลุมตั้งแต่ Redhat, Centos, Ubuntu, Debian และ Linux ตัวอื่นๆ รวมไปถึง Solaris! php ที่ support มีทั้งเวอร์ชั่น 5.2 และ 5.3 ครอบคลุมมากทีเดียว

มาดูกันดีกว่าว่า Newrelic ทำอะไรได้บ้าง

sss

กราฟโดยรวมของ server ของเรา

ทำไมเว็บไซต์ของคุณช้า หรือล่มบ่อย? by heha

31
Jan
2

เคยไหมเว็บไซต์อยู่ๆ ก็ช้าลงอย่างไม่ทราบสาเหตุ upgrade server เป็นตัวใหม่ก็ยังไม่หาย ล่มแล้วล่มอีกทุกวี่ทุกวัน หาสาเหตุไม่เจอ มืด 8 ด้านไปหลายวัน Marketing ก็เร่งให้หาสาเหตุให้เจอไวๆ ไม่งั้นลง ads เพิ่มคนเข้าไม่ได้ นั่นคือสิ่งที่ผมพึ่งเจอมาครับ ฮ่าๆ

ช่วงนี้ทางเกมของผมประสบปัญหากับ performance อย่างหนักทุกเกมเลยครับ ช่วงนี้เลยต้องศึกษาเรื่อง performance อย่างเต็มที่ ลองมาดูสาเหตุหลักๆ ที่ทำให้เว็บไซต์ของคุณช้ากันครับ

วิธีนับ User Online อย่างง่าย by heha

30
Nov
1

ปกติการนับ User Online มักจะทำด้วยการ insert ลง database และนับเวลาเอา แต่ว่าวันนี้ผมมีวิธีนับ User Online อย่างง่ายมาให้ครับ โดยจะใช้การนับจาก Session ที่สร้างขึ้นจาก session_start(); แทน โดยในหลักการแล้วข้อมูล session ก็คือการสร้างไฟล์ text ไฟล์หนึ่งเก็บเอาไว้ใน server และผู้ใช้แต่ละคนจะมี session id ของตัวเองมาเพื่อร้องขอข้อมูลตรงนี้ไปใช้งาน ซึ่งการเก็บข้อมูลลงไฟล์จะเป็นในลักษณะ 1 คนต่อ 1 ไฟล์อยู่แล้ว หลักการเราก็เพียงแค่นับจำนวนไฟล์ในขณะนั้นทั้งหมดก็พอ หากผู้ใช้คนใดเลิกใช้งานไปสักระยะหนึ่งไฟล์จะถูกลบไปเอง จึงสามารถนำมาคำนวณ User Online ได้อย่างที่ต้องการ
พอดี code ที่ใช้งานมีดังนี้

<?php
/* Start the session */
session_start(); 

/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 3); 

function getOnlineUsers(){ 

  if ( $directory_handle = opendir( session_save_path() ) ) {
    $count = 0;
    while ( false !== ( $file = readdir( $directory_handle ) ) ) {
      if($file != '.' && $file != '..'){
        // Comment the 'if(...){' and '}' lines if you get a significant amount of traffic
        //if(time()- fileatime(session_save_path() . '\\' . $file) < MAX_IDLE_TIME * 60) {
          $count++;
        //}
      } 

    }
    closedir($directory_handle); 

    return $count;
  } else {
    return false;
  }
} 

echo 'Number of online users: ' . getOnlineUsers() . "\n";
?>

MAX_IDLE_TIME คือเวลาหน่วยเป็นนาทีว่าจะนับเฉพาะ session ที่ถูกสร้างมาภายในกี่นาที หากต้องการเวลาที่แม่นยำให้ระบุตรงนี้และเอา comment //if(time()- fileatime(session_save_path() . ‘\\’ . $file) < MAX_IDLE_TIME * 60) ออกด้วย

หากคุณเช่า hosting อยู่และไม่ได้เช่าเครื่องเฉพาะเป็นของตัวเองโดดๆ จะต้องระบุ

session_save_path(”/path/to/custom/directory”);

เพิ่มเข้าไปด้วย เป็นการระบุ path ที่จะเก็บไฟล์ session เอง เพื่อจะให้ไม่ปนกับเว็บไซต์อื่นที่ Host อยู่เครื่องเดียวกับเรา

เพียงเท่านี้คุณฃก็จะได้วิธีนับ User Online มาโดยไม่ต้องเขียนระบบด้วย database วุ่นวายครับ แถม performance ยังดีกว่าการใช้ database อีกด้วย แต่วิธีนี้ก็มีข้อเสียอยู่เหมือนกันคือหากต้องการนับเฉพาะหน้าหรือต้องการรายละเอียดปลีกย่อยกว่านี้เช่นนับเฉพาะคนใช้ IE จะไม่สามารถทำได้ ต้องใช้ database เขียน code เอาเองครับ

เริ่มต้นกับการเขียน Facebook Application สำหรับผู้เริ่มต้น (Javascript) by heha

30
Sep
6

ต่อจากบทความก่อน เริ่มต้นกับการเขียน Facebook Application สำหรับผู้เริ่มต้น (PHP) ฉบับปรับปรุง Graph API นะครับ มาครั้งนี้ลองมาดู Javascript API กันบ้าง โดย Application ทุกตัวมีความจำเป็นอย่างหลีกเลี่ยงไม่ได้ที่จะต้องใช้ Javascript API มาทำงานร่วม เพราะต้องใช้ตอน publish หรือสร้างหน้าต่าง invite ซึ่งเป็น UI ของทาง facebook ที่สร้างมาให้ใช้ โดย Javascript Library ตัวนี้เป็นคนละตัวกับในบทความเก่าของผมนะครับ ไม่สามารถใช้ร่วมกันได้ ก่อนอื่นมาดู ก่อนอื่นต้องสร้าง code ส่วนของการ Authenticate ผ่าน Javascript ไว้ด้วย ลองดูไฟล์ตัวอย่างที่นี่ จะมี code ส่วน Authenticate ดังนี้