- Proxy 伺服器应该要摆那里,如何知道网路连线的情形?
由於 proxy 需要频繁地对外部网路进行存取,因此尽量放置於网路的出口处,另外连接在交换器上可以有效地利用频宽、避免乙太网路封包碰撞,因此在繁忙的网路上务必让
proxy 直接连接到骨干交换器,在 FreeBSD 下有几个有用的指令可以观察网路连线的状态:
# ifconfig -a
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 163.28.138.5 netmask 0xffffff00 broadcast 163.28.138.255
ether 00:00:e8:6f:f0:94
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
# netstat -i
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
rl0 1500 <Link#1> 00:10:b5:09:3b:c7 118078 0 110652 4 0
上例中粗体字部份为指令,蓝色字的部份为观察的重点部份
ifconfig -a 列出目前所有的网路界面卡状态
100baseTX <full-duplex> 表目前以 100MB 全双工的方式连线
netstat -i 显示网路连线统计资料
Ipkts: 流入封包数
Opkts: 流出封包数
Ierrs: 流入错误
Oerrs: 流出错误
Coll: 碰撞
- 如何得知 squid 执行中的状态?
最简单的方式便是透过浏览器来观察。squid 本身提供一只 cgi 程式,档名为cachemgr.cgi,squid 安装完后将它复制到
Apache 下的 cgi-bin 这个目录下即可使用。
要察看Cache Manager提供的资讯时,请在浏览器的位址列中键入
http://伺服器的名称或IP位址/cgi-bin/cachemgr.cgi
紧接着会出现登入画面,直接按 Continue...按扭进去就可以了,接着在画面上出现许多的选项,请先点选 General Runtime
Information,察看一般的状态。
Squid Object Cache: Version 2.5.STABLE3 //Squid的版本
| Start
Time: |
Sun,
22 Jun 2003 21:35:00 GMT |
| Current
Time: |
Thu,
26 Jun 2003 18:22:26 GMT |
Connection information for squid:
Number of clients accessing cache: 5421 //使用proxy的电脑数量
Number of HTTP requests received: 1863961 //客户端http要求数量
Number of ICP messages received: 0 //接受到的icp query数量
Number of ICP messages sent: 0 //发出icp query数量
Number of queued ICP replies: 0 //发出icp query数量
Request failure ratio: 0.00
Average HTTP requests per minute since start: 334.8 //每分钟http request的数量
Average ICP messages per minute since start: 0.0 //每分钟处理的icp数量
Select loop called: 40144912 times, 8.321 ms avg
Cache information for squid:
Request Hit Ratios: 5min: 1.1%, 60min: 6.3% //Cache Request命中率
Byte Hit Ratios: 5min: 6.3%, 60min: 10.8% //Cache Byte命中率
Request Memory Hit Ratios: 5min: 33.3%, 60min: 4.2%
Request Disk Hit Ratios: 5min: 33.3%, 60min: 19.1%
Storage Swap size: 21510922 KB //存放cache的磁碟使用量
Storage Mem size: 523572 KB //存放cache的记忆体使用量
Mean Object Size: 29.26 KB
Requests given to unlinkd: 0
Median Service Times (seconds) 5 min 60 min: //平均回应时间
HTTP Requests (All): 0.18699 0.15888
Cache Misses: 0.19742 0.18699
Cache Hits: 0.01098 0.03241
Near Hits: 0.00000 0.09736
Not-Modified Replies: 0.00405 0.01745
DNS Lookups: 0.02130 0.02447
ICP Queries: 0.00000 0.00000
Resource usage for squid:
UP Time: 334045.816 seconds
CPU Time: 36851.633 seconds
CPU Usage: 11.03% //自程式启动起计算,CPU使用率
CPU Usage, 5 minute avg: 2.57% //最近5分钟CPU使用率
CPU Usage, 60 minute avg: 2.81% //最近60分钟CPU使用率
Process Data Segment Size via sbrk(): 732833 KB
Maximum Resident Size: 696968 KB
Page faults with physical i/o: 14013
Memory accounted for: //记忆体使用状态
Total accounted: 663686 KB
memPoolAlloc calls: 271060975
memPoolFree calls: 267170940
File descriptor usage for squid:
Maximum number of file descriptors: 7408 //系统最大file descriptor数
Largest file desc currently in use: 92 //目前使用file descriptor最大值
Number of file desc currently in use: 67 //目前正在使用的file descriptor数
Files queued for open: 0
Available number of file descriptors: 7341
Reserved number of file descriptors: 100
Store Disk files open: 0
Internal Data Structures:
744816 StoreEntries //Cache中存放的快取档案数量
102934 StoreEntries with MemObjects //记忆体斗的快取档案数量
102933 Hot Object Cache Items
735178 on-disk objects //磁碟机中存放的快取档案数量
- Proxy 回应的速度很慢时,可能是那里出问题?如何判定问题发生在那里?
网路回应慢有可能是目的站台的问题,也有可能是频宽不足而塞车的问题,目前台湾学术网路所有往外的封包最后都送往教育部,一起出国或到各大
ISP,但由於频宽需求是永远根不上使用者的脚步,因此在网路流量很大时往往就会塞在教育部动弹不得,故在网路出现变慢的问题时,请先以 ping
或 traceroute 指令测试网路的连线状态,如果封包回应很慢或封包遗失率很高,应该是属网路本身的问题,如果测试的结果良好,再继续看是否是
Proxy 出了问题。
接下来请先察看 Cache Manager 中 General Runtime Information 中 file descriptor
使用量,如果数字很大,表示目前 server 所接到的要求非常多,如果您连线的电脑数量很多的话,server 很可能会撑不住,必须重新编译系统核心,加大数值,接下来再看
Peer Cache Statistics 部分,看看与上游 Proxy 的连线是否正常。
Parent : proxy2.ntcu.net/3128/3130
Flags : no-query no-digest no-netdb-exchange
Address[0] : 211.76.240.232
Status : Up //连线状态
AVG RTT : 0 msec
OPEN CONNS : 17
LAST QUERY : 1056674881 seconds ago
LAST REPLY : 1056674881 seconds ago
PINGS SENT : 0
PINGS ACKED: 0 0%
FETCHES : 19 0% //由parent喂送的物件数量
IGNORED : 0 0%
Histogram of PINGS ACKED:
Last failed connect() at: 27/Jun/2003:06:07:57 +0800 //上一次与parent断线发生的时间
keep-alive ratio: 74%
点选 Cache Manager 中 Cache Utilization 这个项目可以列出较为详细的数据报告其中分成Last 5 minutes,
Last 15 minutes, Last hour, Last 8 hours, Last day, Last 3 days, Totals
since cache startup 等时段的统计分析,以下以最近五分钟的统计为例说明,平常您可以多比对各时段数据产生的变化,在网路连线缓慢时可以用来判定伺服器是否异常。
sample_start_time = 1056674932.61025 (Fri, 27 Jun 2003 00:48:52 GMT)
sample_end_time = 1056675232.99431 (Fri, 27 Jun 2003 00:53:52 GMT)
client_http.requests = 3.996155/sec //客户端每秒的http要求数
client_http.hits = 2.249712/sec //客户端每秒的http命中次数
client_http.errors = 0.000000/sec
client_http.kbytes_in = 1.569799/sec //客户端每秒送出的资料量
client_http.kbytes_out = 243.525491/sec //每秒送出至客户端的资料量
client_http.all_median_svc_time = 0.047755 seconds //反应时间
client_http.miss_median_svc_time = 0.208426 seconds
client_http.nm_median_svc_time = 0.012346 seconds
client_http.nh_median_svc_time = 0.142521 seconds
client_http.hit_median_svc_time = 0.024508 seconds
server.all.requests = 2.173055/sec //squid帮客户端抓取的要求数
server.all.errors = 0.000000/sec
server.all.kbytes_in = 192.338710/sec //squid对外抓取的资料量
server.all.kbytes_out = 1.036534/sec //squid对外送出需求的资料量
server.http.requests = 2.173055/sec
server.http.errors = 0.000000/sec
server.http.kbytes_in = 192.338710/sec
server.http.kbytes_out = 1.039867/sec
server.ftp.requests = 0.000000/sec
server.ftp.errors = 0.000000/sec
server.ftp.kbytes_in = 0.000000/sec
server.ftp.kbytes_out = 0.000000/sec
server.other.requests = 0.000000/sec
server.other.errors = 0.000000/sec
server.other.kbytes_in = 0.000000/sec
server.other.kbytes_out = 0.000000/sec
icp.pkts_sent = 0.000000/sec
icp.pkts_recv = 0.000000/sec
icp.queries_sent = 0.000000/sec
icp.replies_sent = 0.000000/sec
icp.queries_recv = 0.000000/sec
icp.replies_recv = 0.000000/sec
icp.replies_queued = 0.000000/sec
icp.query_timeouts = 0.000000/sec
icp.kbytes_sent = 0.000000/sec
icp.kbytes_recv = 0.000000/sec
icp.q_kbytes_sent = 0.000000/sec
icp.r_kbytes_sent = 0.000000/sec
icp.q_kbytes_recv = 0.000000/sec
icp.r_kbytes_recv = 0.000000/sec
icp.query_median_svc_time = 0.000000 seconds
icp.reply_median_svc_time = 0.000000 seconds
dns.median_svc_time = 0.023364 seconds //DNS的反应时间
unlink.requests = 0.000000/sec
page_faults = 0.163312/sec
select_loops = 148.554315/sec
select_fds = 133.529572/sec
average_select_fd_period = 0.004260/fd
median_select_fds = 0.000000
swap.outs = 0.636585/sec
swap.ins = 1.726446/sec
swap.files_cleaned = 0.343289/sec
aborted_requests = 0.339956/sec //客户端中断连线请求的次数
syscalls.polls = 151.723910/sec
syscalls.disk.opens = 2.369697/sec
syscalls.disk.closes = 2.363031/sec
syscalls.disk.reads = 14.548138/sec
syscalls.disk.writes = 16.931166/sec
syscalls.disk.seeks = 0.000000/sec
syscalls.disk.unlinks = 1.193181/sec
syscalls.sock.accepts = 2.969620/sec
syscalls.sock.sockets = 1.116524/sec
syscalls.sock.connects = 1.116524/sec
syscalls.sock.binds = 1.116524/sec
syscalls.sock.closes = 2.756314/sec
syscalls.sock.reads = 34.145629/sec
syscalls.sock.writes = 101.313696/sec
syscalls.sock.recvfroms = 0.026663/sec
syscalls.sock.sendtos = 0.000000/sec
cpu_time = 28.980575 seconds //squid占用CPU的时间
wall_time = 300.038406 seconds //取样的时间总长
cpu_usage = 9.658955% //平均CPU使用率