ขอคำแนะนำ ปัญหา R ค้างใน apache server-status ครับ

ปัจจุบันใช้ DirectAdmin + Apache2.2 + PHP5.2 ครับ

เซิร์ฟเวอร์รันเว็บเดียวครับ เป็นเว็บ https ครับ

ปัญหาที่เจอตอนนี้ คือ มันมี R มาค้างเป็นจำนวนมาก ใน Apache server-status ลักษณะนี้ครับ เป็นร้อย request เลย T_T

[font=“Courier New”]Parent Server Generation: 1

Server uptime: 2 hours 54 minutes 26 seconds

Total accesses: 23170 - Total Traffic: 85.9 MB

CPU Usage: u171.73 s28.33 cu0 cs0 - 1.91% CPU load

2.21 requests/sec - 8.4 kB/second - 3887 B/request

106 requests currently being processed, 22 idle workers

RRRR_RRRWRRRR__RRWCW_RCRR_RRR_RR__RR_RRRRWRWW_RWRR_CRRRRRWRR_RR_

RR___RCRRWWRRRRRRRRRRRC_R_RWRRRRRCRR_RR_RRRW_RRRRCRCRRCRR.RR…

R…R…R…

…_…R…

…[/font]

load average ก็ไม่สูงนะครับ 1.30 เอง (หรือเกินหนึ่งคือสูงแล้ว >_<)

[font=“Courier New”]top - 16:26:57 up 34 days, 15:13, 1 user, load average: 1.30, 1.22, 1

top - 16:27:05 up 34 days, 15:13, 1 user, load average: 1.27, 1.22, 1.19

Tasks: 320 total, 1 running, 319 sleeping, 0 stopped, 0 zombie

Cpu(s): 13.7%us, 4.4%sy, 0.0%ni, 80.9%id, 0.2%wa, 0.1%hi, 0.7%si, 0.0%st

Mem: 8159152k total, 7563352k used, 595800k free, 695868k buffers

Swap: 8385528k total, 132k used, 8385396k free, 5344008k cached[/font]

ผมเพิ่งติดตั้ง MRTG ครับ ได้สถิติแบบนี้ครับ

ผมเข้าใจว่า R มันคือเซิร์ฟเวอร์กำลังอ่าน request จากผู้ใช้ถูกต้องใหม่ครับ ( “R” Reading Request ) แต่ทั้งๆ ที่ bandwidth ขาเข้าก็แค่ 700kbps เอง (สาย port เป็น 10/100 ครับ) ก็เลยจนปัญญาจริงๆ ครับ ไม่รู้ว่ามันเป็นที่ตรงไหน และแก้อย่างไรดีหรอครับ รบกวนกูรูทุกๆ ท่านด้วยครับ

ดูจากกราฟก็ปกตินิครับ ปริมาณการใช้น่าจะเป็นพวก Streaming หรืออะไรประมาณนั้นหรือเปล่า ปริมาณการใช้คงที่ ถ้าเป็นเว็บมันจะต้องมีสวิงขึ้นๆ ลงๆ

อ๋อ ผมลืมไปครับ ให้ข้อมูลไม่ครบ คือ มันจะมีเซิร์ฟเวอร์เครื่องอื่นที่ Query ฐานข้อมูลจากเซิร์ฟเวอร์นี้ด้วยครับ ตัว traffic ที่ MRTG จับได้คงเป็นตรงส่วน MySQL ครับ เป็น Query รับ-ส่ง ข้อมูลเล็กๆ ครับ

ที่แปลกใจ คือ ตรง server-status ที่มีแค่ 2-3 request per sec [Traffic:8.4 kB/second - 3887 B/request]

แต่กลับมี requests currently being processed ประมาณ 100 เลยครับ (- -)"

เปิด ExtendedStatus On ใน httpd.conf แล้วลองดูใหม่ ว่า R ที่ค้างอยู่มาจาก IP ใหน เรียกเว็บอะไร (แต่ปกติตอน R มันยังไม่มีข้อมูลตรงนี้)

คงต้องลอง ssh แล้วเรียก netstat ดูว่ามี ip ใหน established อยู่บ้าง

netstat -an | grep EST

netstat -an | grep :80

ทั้งเซิร์ฟเวอร์รันเว็บเดียวนะครับ พวกตัว R ถ้าดูใน server-status มันจะยังไม่ขึ้น IP ครับ

[font=“Courier New”]5-3 485672 0/29/530 R 0.58 43 19 0.0 0.09 2.24 ? ? …reading…

6-3 485714 0/11/492 R 0.19 54 1 0.0 0.08 2.07 ? ? …reading…

7-3 485770 0/12/414 R 0.21 0 110 0.0 0.08 1.49 ? ? …reading…

8-3 485771 0/7/400 R 0.16 10 52 0.0 0.07 1.81 ? ? …reading…

9-3 485670 0/19/482 R 0.41 24 5 0.0 0.06 1.78 ? ? …reading…[/font]

ผมลองสั่งลองสั่ง 2 คำสั่งนี้ ไม่พบว่ายิงมาจาก IP ไหนมากเป็นพิเศษครับ เฉลี่ยอยู่ที่ 1 IP ต่อ 1 request ครับ

[font=“Courier New”]netstat -an | grep EST | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

netstat -an | grep “:443” | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n[/font]

(ผมเปลี่ยนเป็น 443 เพราะเข้าใช้ทาง HTTPS อย่างเดียวครับ)

นับ IP มาได้จำนวนเท่านี้ครับ

netstat -an | grep EST | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | wc -l

50

netstat -an | grep “:443” | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | wc -l

180

เพิ่งเคยลองนับแบบนี้เหมือนกันครับ ถึง 180 ได้ยังไงเนี่ย หรือว่า 2 request/sec ที่แสดงใน server-status มันไม่ใช่ความจริงครับ T_T

ขอบคุณมากครับ

มีเว็บเดียวน่าจะลองสร้าง home dir ใหม่ชั่วคราว แล้วสร้างแต่ไฟล์ index.html แล้วนั่งเฝ้า access log, error log ของ apache ดูสักระยะหนึ่ง

มองหา req แปลกๆ

ตามนี้ครับ แยก virtual host ให้ขาดจากกันก่อน

เข้าทางชื่อโดเมนไปเว็บจริง

เข้าทาง ip โยนไป path อื่น แล้วไปไล่ดู access log อีกที