Load average ผมแบบนี้จะไหวไหมครับ พอดี script ใหญ่ครับสไตล์ facebook ใช้ ibm xseries ram 16 ยังไม่อยู่เลยครับ

Load Average 149.35, 146.96, 136.43 ช่วงปกติจะอยู่ 1-5 แต่ peak นี่ขึ้นไป 100 กว่าครับ
% cpu ก็หนักเอาการแก้ยังไงครับ คนเข้าวันละ 10000 ip ครับ แต่เป็น script ใหญ่ครับ

อันนี้ process monitor ครับ

top - 15:23:06 up 9 days, 4:24, 0 users, load average: 141.01, 144.54, 137.40
Tasks: 506 total, 119 running, 387 sleeping, 0 stopped, 0 zombie
Cpu(s): 61.1%us, 6.1%sy, 0.1%ni, 32.4%id, 0.2%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 16322996k total, 15401376k used, 921620k free, 159460k buffers
Swap: 8290296k total, 72460k used, 8217836k free, 8717544k cached

ควรแก้ไข ปรับจูน หรือเพิ่มเครื่องครับ

service ไหนกิน cpu ครับ?

[B]cpu 61 , wa 0.2 ไหง loadaver มันโดดอย่างนั้นละครับ [/B]:e111de78:

ก็ปกติครับ งานที่ใช้ cpu ประมวลผล แต่ไม่ได้ใช้ io ก็แค่นั้นเอง…

mysql ครับบางทีขึ้นไป 50-60% ช่วงคนเข้าเยอะๆหลักพันคนอ่ะครับ
% cpu เคยขึ้นไปถึง 90% ด้วยครับ

อีแบบนี้ผมว่าลืมทำ index

ลองเปิด slow queries log กับ log queries not using indexes ของ mysql ดูครับ

Page: 1 2 3 4 5 6 7 8 9 10 11 Advanced Search
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17148 mysql 20 0 2372m 83m 5508 S 29.3 0.5 129:42.36 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/server.thaistockclub.com.err --pid-file=/var/lib/mysql/server.thaistockclub.com.pid
4599 apache 20 0 220m 15m 3936 R 3.9 0.1 0:07.71 /usr/sbin/httpd -k start -DSSL
14320 apache 20 0 223m 19m 3940 R 3.9 0.1 0:03.81 /usr/sbin/httpd -k start -DSSL
25264 apache 20 0 227m 23m 3872 R 3.9 0.1 0:00.66 /usr/sbin/httpd -k start -DSSL
1304 apache 20 0 229m 25m 4196 R 2.9 0.2 0:08.38 /usr/sbin/httpd -k start -DSSL
1435 apache 20 0 244m 40m 4172 R 2.9 0.3 0:08.98 /usr/sbin/httpd -k start -DSSL
1436 apache 20 0 225m 21m 4112 R 2.9 0.1 0:07.20 /usr/sbin/httpd -k start -DSSL
1497 apache 20 0 228m 23m 4116 R 2.9 0.1 0:08.45 /usr/sbin/httpd -k start -DSSL
4635 apache 20 0 227m 23m 4132 R 2.9 0.1 0:07.36 /usr/sbin/httpd -k start -DSSL
4641 apache 20 0 240m 35m 4176 R 2.9 0.2 0:06.71 /usr/sbin/httpd -k start -DSSL
7458 apache 20 0 223m 19m 4020 R 2.9 0.1 0:05.61 /usr/sbin/httpd -k start -DSSL
7492 apache 20 0 227m 22m 4060 R 2.9 0.1 0:06.75 /usr/sbin/httpd -k start -DSSL
7546 apache 20 0 227m 22m 4080 R 2.9 0.1 0:05.67 /usr/sbin/httpd -k start -DSSL
7547 apache 20 0 219m 14m 3940 R 2.9 0.1 0:06.86 /usr/sbin/httpd -k start -DSSL
9052 apache 20 0 236m 31m 4028 R 2.9 0.2 0:05.96 /usr/sbin/httpd -k start -DSSL
9053 apache 20 0 221m 17m 3936 R 2.9 0.1 0:05.68 /usr/sbin/httpd -k start -DSSL
10607 apache 20 0 224m 19m 4120 R 2.9 0.1 0:05.31 /usr/sbin/httpd -k start -DSSL
10609 apache 20 0 229m 24m 4020 R 2.9 0.2 0:05.32 /usr/sbin/httpd -k start -DSSL
13154 apache 20 0 238m 34m 4232 R 2.9 0.2 0:33.10 /usr/sbin/httpd -k start -DSSL
14173 apache 20 0 224m 19m 4132 R 2.9 0.1 0:04.63 /usr/sbin/httpd -k start -DSSL
15824 apache 20 0 223m 19m 4068 R 2.9 0.1 0:23.96 /usr/sbin/httpd -k start -DSSL
17287 apache 20 0 227m 23m 4084 R 2.9 0.1 0:03.08 /usr/sbin/httpd -k start -DSSL
17351 apache 20 0 238m 34m 4124 R 2.9 0.2 0:03.38 /usr/sbin/httpd -k start -DSSL
18401 apache 20 0 223m 19m 3940 R 2.9 0.1 0:02.27 /usr/sbin/httpd -k start -DSSL
18448 apache 20 0 227m 23m 3936 R 2.9 0.1 0:02.82 /usr/sbin/httpd -k start -DSSL
18450 apache 20 0 230m 26m 4020 R 2.9 0.2 0:03.35 /usr/sbin/httpd -k start -DSSL
19189 apache 20 0 224m 19m 4348 R 2.9 0.1 0:02.90 /usr/sbin/httpd -k start -DSSL
20869 apache 20 0 220m 15m 3948 R 2.9 0.1 0:11.92 /usr/sbin/httpd -k start -DSSL
20918 apache 20 0 227m 23m 4140 R 2.9 0.1 0:12.01 /usr/sbin/httpd -k start -DSSL
20922 apache 20 0 244m 40m 4176 R 2.9 0.3 0:11.98 /usr/sbin/httpd -k start -DSSL
22803 apache 20 0 227m 22m 3956 R 2.9 0.1 0:01.58 /usr/sbin/httpd -k start -DSSL
22846 apache 20 0 239m 35m 4180 R 2.9 0.2 0:01.79 /usr/sbin/httpd -k start -DSSL
22849 apache 20 0 227m 23m 3896 R 2.9 0.1 0:01.27 /usr/sbin/httpd -k start -DSSL
23473 apache 20 0 227m 23m 3920 R 2.9 0.1 0:01.30 /usr/sbin/httpd -k start -DSSL
23508 apache 20 0 227m 23m 3936 R 2.9 0.1 0:01.50 /usr/sbin/httpd -k start -DSSL
23883 apache 20 0 223m 19m 3936 R 2.9 0.1 0:01.23 /usr/sbin/httpd -k start -DSSL
23942 apache 20 0 227m 23m 3948 R 2.9 0.1 0:01.03 /usr/sbin/httpd -k start -DSSL
25302 apache 20 0 225m 20m 3872 R 2.9 0.1 0:00.67 /usr/sbin/httpd -k start -DSSL
25584 apache 20 0 227m 23m 3908 R 2.9 0.1 0:00.49 /usr/sbin/httpd -k start -DSSL
25587 apache 20 0 222m 17m 3868 R 2.9 0.1 0:00.59 /usr/sbin/httpd -k start -DSSL
26725 apache 20 0 224m 19m 3868 R 2.9 0.1 0:00.14 /usr/sbin/httpd -k start -DSSL
27228 apache 20 0 227m 22m 3684 R 2.9 0.1 0:00.07 /usr/sbin/httpd -k start -DSSL
31208 apache 20 0 221m 17m 4020 R 2.9 0.1 0:08.67 /usr/sbin/httpd -k start -DSSL
4287 apache 20 0 238m 34m 4132 R 2.0 0.2 0:17.35 /usr/sbin/httpd -k start -DSSL
4638 apache 20 0 224m 19m 4164 R 2.0 0.1 0:06.85 /usr/sbin/httpd -k start -DSSL
5756 apache 20 0 243m 38m 4180 R 2.0 0.2 0:17.44 /usr/sbin/httpd -k start -DSSL
6039 apache 20 0 238m 34m 4172 S 2.0 0.2 0:16.99 /usr/sbin/httpd -k start -DSSL
7145 apache 20 0 230m 26m 4140 R 2.0 0.2 0:07.61 /usr/sbin/httpd -k start -DSSL
7180 apache 20 0 239m 35m 4168 R 2.0 0.2 0:06.83 /usr/sbin/httpd -k start -DSSL
7181 apache 20 0 227m 22m 4008 R 2.0 0.1 0:06.36 /usr/sbin/httpd -k start -DSSL
Page: 1 2 3 4 5 6 7 8 9 10 11

ช้าที่ mysql ลองปรับ my.cnf

ลองดู slow query log แล้วตรง query ไหนช้า ลองปรับ query ดูครับ :slight_smile:

ส่วนมากก็มาจาก mysql query ช้า apache รอผล query จนค้างสะสมมากขึ้นๆ จนเต็ม max clients

ปัญหา mysql หลักๆก็มีอยู่ไม่กี่อย่าง

  1. ไม่ได้ทำ index ทำให้แทนที่จะ qury 0.00x วินาที กลายเป็น 0.x วินาทีไปจนถึงหลายวินาที แค่ 0.x นี้ก็มีผลกระทบมากแล้วถ้าคนเข้าพร้อมกันจำนวนมาก
  2. คำสั่ง query ซับซ้อนเกิน ทำให้ใช้เวลา query เยอะ
  3. คำสั่ง query ไม่ใส่ limit แล้วได้ผลลัพธ์ออกมาจำนวนเป็นหมื่นๆ record ส่งข้อมูลกันบาน แต่เอาไปใช้จริงแค่ 5-10 ลำดับแรก
  4. มีการ update บ่อยมาก ระหว่าง update จะทำให้ table lock คำสั่ง query อื่นๆต้องรอจน update เสร็จก่อน

พวกนี้บางทีใช้เวลาแค่ไม่ถึงวินาที เวลาคนเข้าไม่เยอะมันก็ทำงานดูเร็วปกติ แต่พอถึงจุดที่คนเข้าเยอะเกินกว่าที่มันจะ query ทัน มันก็เริ่มค้างสะสมขึ้นทีละน้อย วิธีแก้ก็คือทำให้มันทำงานได้เร็วขึ้นทันกับปริมาณ request ที่เรียกเข้ามา
ซึ่งวิธีที่ดีที่สุดก็คือไล่ทำ index และ optimize คำสั่ง query ต่างๆ รวมถึงเอา cache เข้ามาช่วยเพื่อลดจำนวนการ query ลง
แต่หาก optimize สุดๆแล้วยังไม่ทัน ก็จำเป็นต้องหาเครื่องที่แรงขึ้นหรือเพิ่มเครื่อง จะทำ mysql cluster ทำ web load balance หรือทั้ง 2 อย่าง ก็แล้วแต่ว่ามันช้าที่จุดใหน