0154 | script limit bandwidth UDP
Saturday, March 23rd, 2013 Posted in IP Network, Linux | 3 Comments »เอา script ชาวบ้านมาดัดแปลงนิดหน่อยฮะ ต้นฉบับ shape ตาม IP แต่เอามาแก้ให้บีบเฉพาะ UDP
http://www.iplocation.net/tools/traffic-control.php
ซึ่งโดยการใช้งานปกติมันไม่จำเป็นต้องใช้ UDP เยอะอะไรขนาดนี้อยู่แล้ว ก็พอเอามาช่วยกันการยิง udp ออกได้อยู่หน่อยนึง
#!/bin/bash # # udplimiter This script limit the bandwidth for udp traffic # # chkconfig: - 13 87 ### BEGIN INIT INFO # Provides: $udplimiter # Required-Start: $network # Required-Stop: $network # Default-Start: # Default-Stop: 0 1 2 3 4 5 6 # Short-Description: start|stop|status|restart Bandwidth Limiter # Description: This script limit the bandwidth for udp traffic ### END INIT INFO # tc uses the following units when passed as a parameter. # kbps: Kilobytes per second # mbps: Megabytes per second # kbit: Kilobits per second # mbit: Megabits per second # bps: Bytes per second # Amounts of data can be specified in: # kb or k: Kilobytes # mb or m: Megabytes # mbit: Megabits # kbit: Kilobits # To get the byte figure from bits, divide the number by 8 bit # # # Name of the traffic control command. TC=/sbin/tc # The network interface we're planning on limiting bandwidth. IF=eth0 # Interface # Bandwidth limit (in mega bits) BWLIMIT=5mbit # DOWNLOAD Limit # Filter options for limiting the intended interface. U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32" start() { # We'll use Hierarchical Token Bucket (HTB) to shape bandwidth. # For detailed configuration options, please consult Linux man # page. $TC qdisc add dev $IF root handle 1: htb default 30 $TC class add dev $IF parent 1: classid 1:1 htb rate $BWLIMIT $U32 match ip protocol 17 0xff flowid 1:1 # The first line creates the root qdisc, and the next two lines # create two child qdisc that are to be used to shape download # and upload bandwidth. # # The 4th and 5th line creates the filter to match the interface. # The 'dst' IP address is used to limit download speed, and the # 'src' IP address is used to limit upload speed. } stop() { # Stop the bandwidth shaping. $TC qdisc del dev $IF root } restart() { # Self-explanatory. stop sleep 1 start } show() { # Display status of traffic control status. $TC -s qdisc ls dev $IF } case "$1" in start) echo -n "Starting bandwidth shaping: " start echo "done" ;; stop) echo -n "Stopping bandwidth shaping: " stop echo "done" ;; restart) echo -n "Restarting bandwidth shaping: " restart echo "done" ;; show) echo "Bandwidth shaping status for $IF:" show echo "" ;; *) pwd=$(pwd) echo "Usage: $0 {start|stop|restart|show}" ;; esac exit 0 |
เอาไปเซฟใส่ /etc/init.d/udplimiter แล้วสั่ง /etc/init.d/udplimiter start ได้เลย ถ้าจะให้ทำงานตอนเปิดเครื่องอัตโนมัติด้วยก็ chkconfig udplimiter on
อ้อ อย่าลืมแก้ชื่อ interface ด้วยนะครับ ตรง IF=eth0
0125 | การคำนวณ load ของ server
Tuesday, September 20th, 2011 Posted in Linux, Web Server | 2 Comments »สืบเนื่องจากคำถามที่เจอบ่อยๆ:
– เว็บผมมีคนเข้า วันละ xxxx คน พี่รับไหวมั้ยครับ
– เว็บผมมีคนเข้า วันละ xxxx คน ต้องใช้ host ประมาณไหนเหรอครับ
==============================================
เรื่องมันมีอยู่ว่า server 1 เครื่อง ก็เปรียบเสมือนกับ ห้อง 1 ห้อง มีขนาดความจุรับได้ N คน “พร้อมๆ กัน”
แล้วก็มาถามว่า ไอ้ห้อง 1 ห้องที่ว่านี่ “วันนึง” จะรองรับ “คนเข้า” ได้กี่คนครับ?
==============================================
ปัจจัยที่เกิดขึ้นคือ
1) คนที่เข้าห้องนั้น อยู่ในห้องนานแค่ไหน? = response time ของ 1 request
2) ขนาดตัวของคนที่เข้า ใหญ่แค่ไหน (แน่นอน อ้วนมากก็เปลืองพื้นที่ห้องมาก) = request+response size
จากสองข้อนี้ ก็เลยทำให้ไม่สามารถประมาณการใช้งานจริงๆ ได้หรอกครับ เพราะขึ้นอยู่กับพฤติกรรมคนดูล้วนๆ ครับ
ของอย่างนี้มันต้องลอง !!!