FreeBSD 研习课程讲义
Prev 系统效能分析 Next

  • 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使用率  
    		  

Prev Home Next
UP 统计分析