工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

Linux系统下常见性能分析工具的使用

在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下面就具体讲述这几个常用性能分析工具的使用。
 

1.vmstat命令
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。
vmstat使用语法如下:
 vmstat [-V] [-n] [delay [count]]
 各个选项及参数含义如下:
l -V:表示打印出版本信息,是可选参数。
l -n:表示在周期性循环输出时,输出的头部信息仅显示一次。
l delay:表示两次输出之间的间隔时间。
l count:表示按照“delay”指定的时间间隔统计的次数。默认为1。
例如:
vmstat 3
      表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。
vmstat 3 5
表示每3秒更新一次输出信息,统计5次后停止输出。
 

2.iostat命令
iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
iostat一般都不随系统安装,要使用iostat工具,需要在系统上安装一个Sysstat的工具包,Sysstat是一个开源软件,官方地址为http://pagesperso-orange.fr/sebastien.godard
可以选择源代码包或rpm包的方式安装,这里不在讲述安装过程,安装完毕,系统会多出3个命令:iostat、sar和mpstat。然后就可以直接在系统下运行iostat命令了。
  iostat使用语法如下:
iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ]
  各个选项及参数含义如下:
      -c:显示CPU的使用情况。
      -d:显示磁盘的使用情况。
      -k:每秒以k bytes为单位显示数据。
      -t:打印出统计信息开始执行的时间。
      -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。
      interval:指定两次统计间隔的时间;
      count:按照“interval”指定的时间间隔统计的次数。
 

3.sar命令
sar命令很强大,是分析系统性能的重要工具之一,通过sar指令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。
sar使用格式为:
sar [options] [g1]  [-o filename] [interval [count] ]
各个选项及参数含义如下:
l options 为命令行选项,sar命令的选项很多,下面只列出常用选项:
Ø -A:显示系统所有资源设备(CPU、内存、磁盘)的运行状况。
Ø -u:显示系统所有CPU在采样时间内的负载状态。
Ø -P:显示当前系统中指定CPU的使用情况。
Ø -d:显示系统所有硬盘设备在采样时间内的使用状况。
Ø -r:显示系统内存在采样时间内的使用状况。
Ø -b:显示缓冲区在采样时间内的使用情况。
Ø -v:显示进程、文件、I节点和锁表状态。
Ø -n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。它们可以单独或者一起使用。
Ø -q:显示了运行队列的大小,它与系统当时的平均负载相同。
Ø -R:显示进程在采样时间内的活动情况。
Ø -y:显示终端设备在采样时间内的活动情况。
Ø -w:显示系统交换活动在采样时间内的状态。
l -o filename:表示将命令结果以二进制格式存放在文件中,filename是文件名。
l interval:表示采样间隔时间,是必须有的参数。
l count:表示采样次数,是可选参数,默认值是1。
 

例如:
      要查看系统CPU的整体负载状况,每3秒统计一次,统计5次,可以使用以下组合:
      sar –u 3 5
      系统的CPU计数是从0开始的,如果要查看第二颗CPU的运行负载,使用下面组合:
sar –P 1 3 5
要查看系统磁盘的读写性能,使用以下组合:
      sar -d 3 5
      同理,查看系统内存使用情况、网络运行状态,可以分别使用下面命令:
      sar -r 5 2
      sar -n DEV 5 3


4.  系统性能分析标准


性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效、稳定的运行。但是,衡量系统资源利用率好坏的标准没有一个严格的定义,针对不同的系统和应用也没有一个统一的说法,因此,这里提供的标准其实是一个经验值,表15.1给出了判定系统资源利用状况的一般准则:
 表1给出了判定系统资源利用状况的一般准则:

表1

其中:
      %user:表示CPU处在用户模式下的时间百分比。
      %sys:表示CPU处在系统模式下的时间百分比。
      %iowait:表示CPU等待输入输出完成时间的百分比。
      swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。
      swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。
 

5. 说在最后
      以上我们讲解了三个常用的系统性能分析工具,其实linux下性能分析工具还有很多,例如uptime可以检查CPU的平均负载,free可以查看系统内存的使用状况,ps、top可以配合监控系统的进程运行状态,netstat可以监测网络流量状况等等,这些命令的使用方法在我前面文章已经讲述很多,故不在这里讲解。
 

      系统性能优化是个涉及面广、繁琐、长久的工作,寻找出现性能问题的根源往往是最难的部分,一旦找到出现问题的原因,性能问题也就迎刃而解。因此,解决问题的思路变得非常重要。
 

      例如,linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时无法访问。
      针对这个问题,第一步要做的是检测网络,可以通过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这种方式,首先排除网络可能出现的问题;如果网络没有问题,接着进入第二步,对linux系统的内存使用状况进行检查,因为网站响应速度慢,一般跟内存关联比较大,通过free、vmstat等命令判断内存资源是否紧缺,如果内存资源不存在问题,进入第三步,检查系统CPU的负载状况,可以通过sar、vmstat、top等命令的输出综合判断CPU是否存在过载问题,如果CPU没有问题,继续进入第四步,检查系统的磁盘I/O是否存在瓶颈,可以通过iostat、vmstat等命令检查磁盘的读写性能,如果磁盘读写也没有问题,linux系统自身的性能问题基本排除,最后要做的是检查程序本身是否存在问题。通过这样的思路,层层检测,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就变得非常简单。

最完的htaccess文件用法收集整理

1.时区设置
有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。

1.SetEnv TZ Australia/Melbourne

2. 搜索引擎友好的301永久转向方法
为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。

1.Redirect 301 http://www.aqee.net/home http://www.aqee.net/
3. 屏蔽下载对话框
通常,当你下载东西的时候,你会看到一个对话框询问你是保持这个文件还是直接打开它。如果你不想看到这个东西,你可以把下面的一段代码放到你的.htaccess文件里。

1.AddType application/octet-stream .pdf
2.AddType application/octet-stream .zip
3.AddType application/octet-stream .mov
4. 省去www前缀
SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反这来。

1.RewriteEngine On
2.RewriteBase /
3.RewriteCond %{HTTP_HOST} ^www.lvtao.net [NC]
4.RewriteRule ^(.*)$ http://lvtao.net/$1 [L,R=301]
5. 个性化Error页面
对每个错误代码定制自己个性化的错误页面。

1.ErrorDocument 401 /error/401.php
2.ErrorDocument 403 /error/403.php
3.ErrorDocument 404 /error/404.php
4.ErrorDocument 500 /error/500.php
6. 压缩文件
通过压缩你的文件体积来优化网站的访问速度。

1.# 压缩 text, html, javascript, css, xml:
2.AddOutputFilterByType DEFLATE text/plain
3.AddOutputFilterByType DEFLATE text/html
4.AddOutputFilterByType DEFLATE text/xml
5.AddOutputFilterByType DEFLATE text/css
6.AddOutputFilterByType DEFLATE application/xml
7.AddOutputFilterByType DEFLATE application/xhtml+xml
8.AddOutputFilterByType DEFLATE application/rss+xml
9.AddOutputFilterByType DEFLATE application/javascript
10.AddOutputFilterByType DEFLATE application/x-javascript
7. 缓存文件
缓存文件是另外一个提高你的网站访问速度的好方法。

1.
2.Header set Cache-Control “max-age=2592000″
3.
8. 对某些文件类型禁止使用缓存
而另一方面,你也可以定制对某些文件类型禁止使用缓存。

1.# 显式的规定对脚本和其它动态文件禁止使用缓存
2.
3.Header unset Cache-Control
4.
安全问题
下面的htaccess代码能够提高你的web服务器的安全水平。图片链接盗用保护非常有用,它能防止其他人偷盗使用你的服务器上的图片资源。

1. 通过.htaccess放盗链
痛恨那些偷盗链接你的web服务器上的图片资源而耗尽了你的带宽的行为吗?试试这个,你可以防止这种事情的发生。

1.RewriteBase /
2.RewriteCond %{HTTP_REFERER} !^$
3.RewriteCond %{HTTP_REFERER} !^http://(www.)?aqee.net/.*$ [NC]
4.RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]
2. 防黑客
如果你想提高网站的安全等级,你可以去掉下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术。

1.RewriteEngine On
2.
3.# proc/self/environ? 没门!
4.RewriteCond %{QUERY_STRING} proc/self/environ [OR]
5.
6.# 阻止脚本企图通过URL修改mosConfig值
7.RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
8.
9.# 阻止脚本通过URL传递的base64_encode垃圾信息
10.RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
11.
12.# 阻止在URL含有<\script>标记的脚本
13.RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
14.
15.# 阻止企图通过URL设置PHP的GLOBALS变量的脚本
16.RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
17.
18.# 阻止企图通过URL设置PHP的_REQUEST变量的脚本
19.RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
20.
21.# 把所有被阻止的请求转向到403禁止提示页面!
22.RewriteRule ^(.*)$ index.php [F,L]
3. 阻止访问你的 .htaccess 文件
下面的代码可以阻止别人访问你的.htaccess文件。同样,你也可以设定阻止多种文件类型。

1.# 保护你的 htaccess 文件
2.
3.order allow,deny
4.deny from all
5.
6.
7.# 阻止查看指定的文件
8.
9. order allow,deny
10. deny from all
11.
12.
13.# 多种文件类型
14.
15. Order Allow,Deny
16. Deny from all
17.
4. 重命名 htaccess 文件
你可以通过重命名htaccess文件来对其进行保护。

1.AccessFileName htacc.ess
5. 禁止目录浏览
禁止服务器对外显示目录结构,反之亦然。

1.# 禁止目录浏览
2.Options All -Indexes
3.
4.# 开放目录浏览
5.Options All +Indexes
6. 改变缺省的Index页面
你可以把缺省的 index.html, index.php 或 index.htm 改成其它页面。

1.DirectoryIndex business.html
7. 通过引用信息来阻止某些不欢迎的浏览者

1.# 阻止来自某网站的用户
2.
3. RewriteEngine on
4. RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
5. RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
6. RewriteRule .* – [F]
7.
8.
8. 通过判断浏览器头信息来阻止某些请求
这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

1.# 阻止来自某些特定网站的用户
2.
3.SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider
|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
4.SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
5.Deny from env=HTTP_SAFE_BADBOT
6.
9. 禁止脚本执行,加强你的目录安全

1.# 禁止某些目录里的脚本执行权限
2.AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
3.Options -ExecCGI

libltdl.so.3: cannot open shared object file

rpm -qf /usr/lib/libltdl.a

libtool-ltdl-devel-1.5.22-7.el5_4

yum install -y libtool-ltdl-devel

 

表单过期的处理(提交出错后返回,保存原来数据)

开发过程中,经常会出现表单出错而返回页面的时候填写的信息全部丢失的情况,为了支持页面回跳,可以通过以下两种方法实现。
1.使用header头设置缓存控制头Cache-control。
header('Cache-control: private, must-revalidate');  //支持页面回跳
2.使用session_cache_limiter方法。
session_cache_limiter('private, must-revalidate'); //要写在session_start方法之前
下面的代码片断可以防止用户填写表单的时候,单击“提交”按钮返回时,刚刚在表单上填写的内容不会被清除:
session_cache_limiter('nocache');
session_cache_limiter('private');
session_cache_limiter('public');
session_start();
//以下是表单内容,这样在用户返回该表单时,已经填写的内容不会被清空
将该段代码贴到所要应用的脚本顶部即可。
Cache-Control消息头域说明Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh和only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate和max-age。各个消息中的指令含义如表所示。

缓存指令

 

说    明

public 指示响应可被任何缓存区缓存
private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效
no-cache 指示请求或响应消息不能缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应

/proc/net/tcp

我们使用脚本获取本地ip的方式,大多人选用的是ifconfig命令,从里面提取ip,最近在看proc,/proc/net/tcp这个文件里就有本地ip.

说到这里看看tcp文件的各个字段的意思吧!
  4: 1D22A10C:0BDA 1706A104:A536 01 00000000:00000000 02:00016A6E 00000000  1001        0 94226 2 ffff8107bdb4e300 56 10 15 2 100
上面这个是一行,
4:是打开套接字的编号,表示打开了此种类型的套接字
1D22A10C是本地ip地址,反着写的16进制数
0BDA 打开的本地端口号
1706A104目的ip
A536 目的端口号
01 tcp状态
00000000:00000000传输队列和接收队列
02:00016A6E 计时作用:节拍数和时钟频率
00000000  超时未恢复数
1001  uid
0 未应答,0表示窗口探测
94226  inode
2 socket参考数目
ffff8107bdb4e300 socket在内存中的位置
56传输超时
10软件时钟的预知活动,ack延时控制数据
15 (ACK .quick<<1)|ack.pingpong
2发送拥塞窗口
100慢开始入口大小

squid流量限制

配置squid代理,用的是直接编译,不是用port安装的。今天想对某些用户进行流量控制, 
发现delay_pool不起作用,原来是要编译的时候要加enable选项--enable-delay-pools ,郁闷。 

下面是一篇很好的配置说明 
---------------------------------------- 
Squid 是一种源代码开放的高性能代理缓存服务器。它可支持FTP,gopher和Http数据对象的代理。另外,Squid也支持SSL,多样化访问控制和代理请求的完整日志功能。通过轻量级的网际缓存协议,Squid以网状或层次的方式分配内存,这样能节省额外的带宽。提供Http服务加速代理,Web服务器把Http数据推到Squid缓存中,外界的请求访问可以通过缓存提取所需数据,实现Web服务器的动态镜像。 
另外,为了实现对Squid服务器的监控,采用MRTG。MRTG 是 Multi Router Traffic Grapher 的缩写,它主要的用途是监测网络服务设备的流量,并生成包括图片的HTML文件,可以直观的显示网络服务的流量,以提供Squid缓存服务的监测。 
通过Squid+MRTG可以配置一个完善的代理服务提供方案。下面为具体配置步骤: 
一.基础准备 
Squid下载地址:http://www.squid-cache.org 
版本:squid-2.4.STABLE4-src.tar.gz 
MRTG下载地址:http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/ 
版本:mrtg-2.9.22.tar.gz 
机器配置为:256M内存,9G硬盘(其中4G分区专用缓存目录),PII433。 

二.安装步骤 
解压Squid(一般做法,把软件包括在/opt目录下) 
#tar zxvf squid-2.4.STABLE4-src.tar.gz 
#cd squid 
//进行编译 
#./configure --prefix=/usr/local/squid --enable-delay-pools --enable-snmp --enable-cache-digests --enable-auth-modules=”NCSA” 
#make all 
#make install 
*对编译项目的解释: 
--prefix 为编译Squid所存放的目录,这里为/usr/local/squid 
--enable-delay-pools 此选项使能一个延时池,这样能对某些特定的请求限制额定带宽。 
--enable-snmp 此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。 
--enable-cache-digests 使能缓存摘要,本来此项目的是为了在Squid集群服务之间迅速发现缓存对象,这里在本地使用,可以加快请求时,检索缓存内容的速度。 
--enable-auth-modules 此编译选项启用认证模块,可以对访问代理用户进行授权。 

安装MRTG 
#tar zxvf mrtg-2.9.22.tar.gz 
#cd mrtg* 
#./configure --prefix=/usr/local/mrtg-2 
#make 
#make install 
/* 几点说明: 
1.MRTG大部分程序是用Perl脚本写成,需要Perl版本为5.005以上才能运行,RH 7.2带有perl版本为v5.6.0,非常满足要求。(如果版本不够,请到www.perl.com下载安装。) 
2. MRTG需要zlib,gd和libpng三个处理图形的库支持,RH7.2满足此要求。(如果没有安装,请到http: //www.boutell.com/gd/ http://www.libpng.org/pub/png/src/ http://www.gzip.org/zlib 下载安装) 

三.具体配置 
lSquid配置(仅对必要选项配置并说明): 
http_port 80 
此选项用于Squid代理所侦听的端口,由于要实现Http加速代理,则侦听端口80 
tcp_outgoing_address 255.255.255.255 
此句法指定了远程服务器的IP地址,这里我们使用255.255.255.255来指定为所有地址 
tcp_incoming_address 
这里可以使用http_port语法进行绑定端口和IP地址。表示客户端的请求。可以不使用。 
cache_mem 64 MB 
由于Squid在读写磁盘,I/O通道,数据转贮等需要大量内存,我们可以把内存值稍微设置大一些,这样可以提供服务器性能。 

cache_swap_low 95 
这用做表示缓存内部对象的替换的衡量基线。当交换分区的磁盘利用率超越这个基线,那么缓存对象替换也就随之开始。这里是用百分率做衡量标准。 

cache_swap_high 98 
此标记用于缓存对象替换的最高程度,当交换分区磁盘利用率接近此设置,则表示对象的更新程度更为剧烈。这里由于我的缓存区设置比较大,因此设置为98%。 

下面几个配置标记采用系统默认配置。 
{ maximum_object_size 4096 KB 
{ 超过此尺寸的对象将不缓存。 
{ minimum_object_size 0 KB 
{ 小于此尺寸的对象将不缓存。 
{ maximum_object_size_in_memory 8 KB 
{ 内存中能缓存的最大对象尺寸。 
{ ipcache_size 1024 
{ 指定IP缓存大小。 
{ ipcache_low 90 
{ 缓存IP地址的最低基线。 
{ ipcache_high 95 
{ 缓存IP地址的最高极限。 
{ fqdncache_size 1024 
{ 缓存DNS全域名解析的尺寸。 

cache_replacement_policy lru 
此标记用于当缓存新对象时,使用缓存策略来清除缓存中特定对象。这里使用lru表示:它只替换长时间没有被访问过的对象。其他策略请参看配置文档介绍。 

memory_replacement_policy lru 
此用法同上,区别在于替换内存对象。 

cache_dir ufs /cache 4000 16 256 
设置缓存根目录为/cache,类型为ufs,缓存区大小为4G,可以有16个二级子目录,每有二级目录有256个三级子目录。 

cache_access_log /var/log/squid/access.log 
cache_log /var/log/squid/cache.log 
cache_store_log /var/log/squid/store.log 
cache_swap_log /var/log/squid/swap.log 
上面几项是缓存日志记录的路径和文件名。 

log_ip_on_direct on 
记录客户端主机的IP地址。 

log_fqdn on 
记录全DNS域名解析。 

mime_table /usr/local/squid/etc/mime.conf 
Squid所用mime的文件路径 

pid_filename /usr/local/squid/logs/squid.pid 
Squid进程ID的文件。 

ftp_user Squid@ynst.net.cn 
这里可以使用匿名登陆FTP服务器。 

ftp_list_width 32 
FTP文件列表长度,超过长度则截断文件名。 
ftp_passive on 
允许主动连接FTP服务器。 

dns_nameservers 202.98.187.1 
指定代理的域名解析服务器。 

authenticate_program /usr/local/squid/bin/ncsa_auth 
/usr/local/squid/etc/passwd 
代理认证程序,这里在/usr/local/squid/etc使用htpasswd产生一个密码文件,具体方法如下: 
#htpasswd –cdb passwd auth_usr1 pass1 
#htpasswd –db passwd auth_usr2 pass2 
#htpasswd –db passwd auth_usr3 pass3 
创建passwd文件,并添加auth_usr1,auth_usr2,auth_usr3三个认证用户。 

authenticate_children 5 
所需要要产生的认证进程数。 

authenticate_ttl 3600 
此标记设置认证保持时间。 

authenticate_ip_ttl 1800 
此标记设置认证绑定IP地址的时间长度。 

authenticate_ip_ttl_is_strict on 
此标记可在authenticate_ttl时间内,拒绝其他非认证IP地址访问。 

request_header_max_size 10 KB 
request_body_max_size 1 MB 
设置了Http请求的包头和数据大小。 

request_body_max_size 0 
这里,请求所返回的数据大小为0,意义为没有任何限制。 

connect_timeout 180 seconds 
read_timeout 15 minutes 
request_timeout 20 seconds 
上面几项是代理服务几个超时设置,这里使用配置文件默认值。 

下面是访问控制列表一些配置,这里对访问的IP地址,域名,访问类型极其访问代理的权限做的限制: 
acl acldomain dstdomain .ynst.net.cn 
acl acceleratedport port 80 
acl acceleratedhost dst 202.98.187.17/255.255.255.255 
acl aclprotocol proto HTTP FTP 
acl aclmethod method GET POST 

acl aclauth proxy_auth required 
(注:这里使用required表示任何passwd文件中存在的合法用户才授予访问权限。) 

acl aclsnmp snmp_community secrect 
MRTG可以使用snmp协议检测此代理服务运行状态。 

acl aclconn maxconn 20 
可并行连接的最大数量。 

启用定义的访问控制列表 
http_access allow manager localhost 
http_access deny manager 
http_access allow aclauth 
http_access allow acceleratedport acceleratedhost 
http_access deny all 

下面为缓存管理设置 
cache_mgr admin@ynst.net.cn 
设置缓存管理者的接受邮件地址。 

cache_effective_user squidusr 
cache_effective_group squidgrp 
设置执行Squid的用户和用户组。 
{注:设置用户和用户组及其权限修改方法如下: 
#groupadd squidgrp 
#useradd –g squidgrp –d /home/squidusr squidusr 
修改log日志权限属性,使squidusr有写权限。 
#chown squidusr /var/log/squid 
#chgrp squidgrp /var/log/squid 
#chown squidusr /var/log/squid/*.log 
#chown squidgrp /var/log/squid/*.log 
} 

下面配置Http服务加速代理 
httpd_accel_host 202.98.187.17 
httpd_accel_port 80 
httpd_accel_with_proxy on 
(注:如果配置代理和加速服务,必须httpd_accel_with_proxy选项打开。如果需要配置多个加速,可以使用虚拟的概念。) 

snmp_port 3401 
此标记设置snmp_port端口为3401,可以使MRTG监测服务运行状态。 

snmp_access allow aclsnmp localhost 
snmp_access deny all 
snmp_incoming_address 0.0.0.0 
snmp_outgoing_address 0.0.0.0 

以上选项用于配置和MRTG交互信息的Snmp设置。 

digest_generation on 
digest_rebuild period 1 hour 
digest_rewrite_period 1 hour 
digest_swapout_chunk_size 4096 bytes 
digest_rebuild_chunk_percentage 10 
产生缓存摘要,并设置摘要重构所需要的时间及其相关设置,这里采用系统默认设置。缓存摘要使的庞大的缓存内容形成一个微型检索,提高代理性能。 

最后我们进行延迟队列池进行配置 
延迟队列池可以基于一定规则对特定请求数据的进行限制,这样可以防止恶意用户发送非正规数据串攻击服务器。 
以下选项只在必要处进行说明,配置如下: 
delay_pools 1 #定义一个池 
delay_class 1 1 #池为1类型 
delay_access 1 allow all #允许类型1的所有请求访问 
delay_parameters 1 128000/128000 #限制访问的128k/s 
delay_initial_bucket_level 50 #Squid启动时,初始化池所用的带宽数量。 

运行Squid代理服务: 
#squid –z /*创建Squid所使用的缓存目录结构 
如果想在前台运行 
#squid –NCdl 
如果想在后台运行 
#squid 
检查Squid是否运行 
#squid –k check 




lMRTG配置: 
首先测试SNMP服务是否启动: 
#snmpwalk -p 3401 hostname communitystring .1.3.6.1.4.1.3495.1.1 
如果看到如下输出: 
enterprises.nlanr.squid.cacheSystem.cacheSysVMsize = 7970816 
enterprises.nlanr.squid.cacheSystem.cacheSysStorage = 2796142 
enterprises.nlanr.squid.cacheSystem.cacheUptime = Timeticks: (766299) 2:07:42.99 
则说明SNMP正常工作。 
按照mrtg.hdl.com的文档,使用cfgmaker和indexmaker就可以生成MRTG所需要的Web发布文件。使用cfgmaker可以创建配置MRTG所需要的配置文件,而Indexmaker则是检索MRTG生成的Web文件,制作一个Index.html。这里,我提供一种更为简洁的办法: 
(感谢Chris提供的mrtg-squid.cfg文件和index.html,可到http://www.psychofx.com/chris/unix/mrtg/ 下载这两个文件。) 
修改mrtg-squid.cfg文件选项如下: 
修改 WorkDir 和 LoadMIBs 路径设置 
修改所有出现在文件中的"hostname" 为你实际服务器名字 
修改所有 "chris"字段为你需要的名字和地址 
修改community 字串属性 
这里配置如下: 
WorkDir: /home/www/mrtg/squid 
LoadMIBs: /usr/local/squid/etc/mib.txt 
所有public@hostname修改secrect@proxysvr 

创建/home/www/mrtg/squid这样一个目录。 
#mkdir /home/www/mrtg/squid 
#cd /home/www/mrtg/squid 
#cp /opt/mrtg-squid.cfg . 
#mrtg mrtg-squid.cfg 
#cp /opt/index.html . 

修改/etc/httpd/conf/httpd.conf如下几个选项 
Listen 8000 
Port 8000 
Documentroot /home/www/mrtg/squid 

由于mrtg读取文件需要资源,因为合理设置读取间隔,这里我设置为5分钟: 
crontab –e 
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /home/www/mrtg/squid/mrtg-squid.cfg 

这样,我们就建立了一个完善的代理加速访问服务器,通过mrtg的强大监控,可以统计服务器运行时设备运行状态。由于以上软件遵从GNU,因此一种强大而有经济的建站手段。通过认证控制,允许特定用户使用代理服务。而Web加速服务器则成为服务器镜像的方便手段。 

对源网站进行限速

今天测试了一下squid使用delay_pools来对源网站的访问进行限速.非常好用,如下

使用squid建二个源网站

 
acl php-oa url_regex -i ^http://.*php-oa.com/.*
acl sudo-u url_regex -i ^http://.*sudo-u.com/.*
http_access allow mysite
http_access allow sudo-u
http_access deny all
icp_access allow all
下面开始正文,我们要用到squid中的delay_pools,delay_pools里可以定义多个容器(多个源定义多个),而这个容器就是我们要控制的带宽,当容器到达所设定的容量时,这个容器的所有者就无法超过我们所设定的带宽限制.

 

开始设置squid的delay_pools


delay_pools 2  #设置二个pools来对二个源进行控制
 
delay_class 1 2    #设置第一个pools中的地址为C类网段中的每个IP地址流量
delay_access 1 allow php-oa
delay_access 1 deny all
delay_parameters 1  64000/64000 64000/32000   #连接php-oa总速度64000,每个ip可以3200的速度
 
delay_class 2 1
delay_access 2 allow sudo-u
delay_access 2 deny all
delay_parameters 2 32000/16000 #客户端下载sudo-u.com这个网站的总速度为1600,但squid连接源网站速度为32000
 

class定义:

class类型1为单个IP地址流量
class类型2为C类网段中的每个IP地址流量
class类型3为B类网段中的每个C类网段中的每个IP地址流量

delay_parameters语法:

类型1只有一个总带宽流量实际也就是这个IP地址的流量
delay_parameters pool total
例:delay_parameters 1 64000/64000

类型2有两个带宽流量参数,第一个为整个C类型网段流量,第二个为每个IP流量
delay_parameters pool tatal per-host
例:delay_parameters 1 -1/-1 64000/64000

类型3有三个带宽流量参数,第一个为整个B类网总流量,第二个为每个B类网段中的C类网段总流量,第三个为了B类网段中每个C类网段中的每个IP流量
delay_parameters pool total network per-host
例:delay_parameters 1 -1/-1 -1/-1 64000/64000

注:  -1/-1表示流量无限制.每个delay_parameters的数值是由"回源站的速度/客户最大下载速度"组成
  另外,对HIT的文件没有作用

在Squid中限制网络带宽的实例讲解

在网上查了不少Squid中设置流量限制的文章,要么东抄西抄,语焉不详,要么翻译的不知所云,英文文档又讲的太理论,太繁琐。其实,这方便对我们一般网络管理员来说就那么几项设置有用,所以自己归纳总结了一些相关的知识和技巧。

Squid控制访问带宽的架构是这样的,首先,你可以定义一个或几个pool(池)来操控里面的流量,而你要为每个pool定义它们的class(类型),类型其实就是决定控制那些主机流量的范围,类型分为以下几种:

class定义:

class类型1表示只对pool设置相关总流量(这样比较好理解,不要加入什么bucket的概念)
class类型2表示既对pool设置总量控制,也为C类网段中的每个IP地址流量
class类型3表示既对pool设置总量控制,也为B类网段中的每个C类网段中的每个IP地址设置流量

最后就是对建立的pool设置它们的流量控制,整个过程是这样:

先在squid.acl.config文件中定义你允许哪些主机使用你的代理(这部分不属于带宽设置):

acl myteam src 172.16.23.108/32 172.16.23.53/32

acl mynet src 172.16.23.108/32 172.16.23.53/32

http_access allow myteam

http_access allow mynet

接下来进行带宽设置:

delay_pools 2  #假设你设置两个pools来分别管理两个不同的网段
 
delay_class 1 2    #设置第一个pools中的地址为C类网段中的每个IP地址流量
delay_access 1 allow myteam
delay_access 1 deny all
delay_parameters 1  64000/64000 32000/64000   #连接myteam总速度64000byte(64KB),每个ip可以3200的速度
 
delay_class 2 1  #将pool 2设为类型1,只控制总mynet的总流量
delay_access 2 allow mynet
delay_access 2 deny all
delay_parameters 2 32000/64000 #设置总流量速度为32000

注:   -1/-1表示流量无限制。 斜杆前后两个参数为最小流量与最大流量.

例如:delay_parameters 1 -1/-1  #表示你对pool 1不限速

每个delay_parameters的数值是由restore(byte/sec)/max(bytes)组成,restore是表示以bytes/sec的速度下载数据到bucket里,而max则表示bucket的容量bytes值.

备注2:SQUID FAQ中有提到,建议max至少要设为restore的两倍(It is recommended that the maximum is at least twice the restore value)