squid加载tcmalloc性能优化测试(编译)

04 Feb 2010 Posted in  squid

话接上文,同一组LVS下,昨天采用重编译方式部署了另一台squid服务器。同样跑上一天,再次对比一番。今天流量比上回稍微少些,未加载的服务器cacti监控截图如下: CPU占用率 ===================== 负载 继续阅读……


squid加载tcmalloc性能优化测试(动态)

01 Feb 2010 Posted in  squid

昨天下午在一台squid上加载了tcmalloc。运行到现在,整整一天时间。现取LVS下与其完全相同配置的另一台未加载tcmalloc的squid服务器进行比较。 环境说明: CPUinfo:Intel(R) Xeon(R) CPU  E5405  @ 2.00GHz MEM:4G SQUID:Version 2.6.STABLE21 当单台流量20M,TCP连接数6w时,未加载tcmalloc的服务器CPU占用率和负载情况如下图: CPU占用率 负载 继续阅读……


squid几个第三方工具

31 Jan 2010 Posted in  squid

GADMIN-SQUID 在linux环境下运行,经本人下载src后看,只能用于本机squid管理,不支持批量…… 继续阅读……


squid加载tcmalloc性能优化测试(原理)

31 Jan 2010 Posted in  squid

TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。其作者宣称tcmalloc相对于glibc2.3 malloc(aka-ptmalloc2)在内存的分配上效率和速度有6倍的性能提高,tcmalloc的常用场景是用于加速MySQL,不过据Wikipedia的hacker(Domas Mituzas)说,tcmalloc不仅仅对MySQL起作用,对squid也同样起作用(网上也有很多人在nginx上启用tcmalloc了),不过目前squid并没有official way来使用tcmalloc。 TCMalloc的实现原理和测试报告请见一篇文章:《TCMalloc:线程缓存的Malloc》 那么让我们赶紧给squid加载上tcmalloc,提高cache服务器在高并发情况下的性能,降低系统负载吧。 因为服务器是64位OS,所以要先安装libunwind库。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。(又cp一句话,^=^) bashwget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz tar zxvf libunwind-0.99.tar.gz cd libunwind-0.99/ CFLAGS=-fPIC ./configure make CFLAGS=-fPIC make CFLAGS=-fPIC install 普通的./configure&&make&&make install可不行哟~ 然后开始安装tcmalloc: bashwget http://google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz tar zxvf google-perftools-1.8.1.tar.gz cd google-perftools-1.8.1/ ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --enable-minimal --disable-dependency-tracking make && make install 然后配置动态链接库,因为是之前是默认安装,这里自然就是/usr/local/lib了。 bashecho "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf /sbin/ldconfig 然后给squid加载tcmalloc。官方推荐是重新编译: 先./configure,然后vi src/Makefile,修改如下: 继续阅读……


header_replace试验

31 Jan 2010 Posted in  squid

在linuxtone论坛上,偶见一贴,说采用如下配置,browser就可以正常遵守originserver的过期设置,而且充分利用browser本身的缓存设置,对server来说就可以达到减少304请求的效果,从而提升机器性能,节省带宽云云…… 继续阅读……


防盗链二进阶(squid外部ACL)

31 Jan 2010 Posted in  CDN

服务器防盗链设置,从最简单的referer判断,到进阶的key+time生成md5值,应该说是比较可靠了,而还有一种防盗链方式,基于IP/COOKIE的,这个我没找到太多有用信息,似乎IIS有个相关插件? 只看到一篇squid的相关文章,简单的举了个防盗链的例子,未必有效(因为把cookie做明文处理,相比md5加密实在是防君子不防小人)。倒是从中学习一下external_acl_type用法,对squid进阶一番罢~~ 首先按惯例,上权威:《squid中文权威指南》6.1.3章节和12.5章节。 用法如下: external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..] options包括:ttl、negtive_ttl、children、concurrency、cache和grace; FORMAT包括:%LOGIN,%EXT_USER,%IDENT,%SRC,%SRCPORT,%DST,%PROTO,%PORT,%METHOD,%MYADDR,%MYPORT,%PATH,%USER_CERT,%USER_CERTCHAIN,%USER_CERT_xx,%USER_CA_xx,%{Header},%{Hdr:member},%{Hdr:;member},%ACL,%DATA。 外部程序输出结果必须是OK或者ERR,不过可以再带上一些keyword,比如user/passwd,ERR的messages,access.log里记录的%ea等等。 cookie防盗链举例squid/libexec/check_cookie.pl如下: 继续阅读……


ubuntu 9.10下linuxqq经常挂掉的解决方案

30 Jan 2010 Posted in  linux

ubuntu 9.10下linuxqq(官方的QQ,八百年不更新的那个了) 继续阅读……


限速进阶

30 Jan 2010 Posted in  CDN

继续横向比较,之前有squid的限速配置,现在说nginx限速,nginx关于限速的模块有三个:HTTPLimitZoneModule、HTTPCoreModule和HTTPLimitReqModule,详见官方wiki,就不再贴链接了,能不能上天知道,真是地上芙蓉姐,天上绿坝娘呀…… 继续阅读……


防盗链进阶(nginx、lighttpd和squid类比)

30 Jan 2010 Posted in  CDN

在折腾squid的rewrite.pl时,参考的是公司原有的一个防盗链脚本。如下: 继续阅读……


日志管理

29 Jan 2010 Posted in  linux

第一个,最常见的cronolog,因为他配对apache,apache太常见,所以cronolog也就常见了~~稳定版本1.6.2,似乎不支持2G以上的日志,因为那时候linux内核也不支持。。。现在有beta版可以,另据网友分析,其实只要修改1.6.2源代码中的openfile函数成openfile64就行了…… 使用方法: 继续阅读……


端口转发

28 Jan 2010 Posted in  linux

常见的linux端口转发,是iptables方式,方法如下: 继续阅读……


squid页面跳转试验

27 Jan 2010 Posted in  squid

某客户页面跳转试验记录 继续阅读……


CUshell版惊见中国特色脚本

24 Jan 2010 Posted in  bash

58同城: 继续阅读……


squid自动配置web化

23 Jan 2010 Posted in  CDN

[root@test data]# cat index.htm 继续阅读……


系统优化——TCP参数

19 Jan 2010 Posted in  linux

tcp_syn_retries :INTEGER 默认值是5 对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定的) 继续阅读……


squid刷新缓存

13 Jan 2010 Posted in  CDN

这篇博文的起因是最近犯的一个低级错误。某客户要求立刻刷新掉一批url。格式是http://a.b.com/index.jsp?pid=123456&id=654321这样的。 我也没多想,上去就执行“squidclient -p 80  -m purge http://a.b.com/index.jsp?pid=123456&id=654321”。结果硬是刷不掉……明明访问源站已经没有这个url了。我wget居然还能MISS/200~~~ 直到同事提醒。才赫然发现其实我一直在purge和wget的,不是http://a.b.com/index.jsp?pid=123456&id=654321,而是http://a.b.com/index.jsp?pid=123456。linux把url里的&当作后台运行的命令执行了……而access.log中为了安全又没记录?后的具体参数,于是傻傻的跟客户客服扯皮了N久…… “squidclient -p 80  -m purge ‘http://a.b.com/index.jsp?pid=123456&id=654321’”这么一刷立刻就好了~~ 由此告诫自己,以后一定要严谨行事,引号最好还是要养成习惯都给带上~~ 继续阅读……


刷新squid缓存的php脚本

13 Jan 2010 Posted in  CDN

<?php
interface Flush_Cache
{
    public function flush($url);
}
class Flush_Cache_HTTP_Header_Impl implements Flush_Cache
{
    public function flush($url)
    {
        if(empty($url))
        {
            return;
        }
        $url_component = parse_url($url);
        global $g_squid_servers;
        foreach ($g_squid_servers as $server)
        {
            $squid_params = split(':' , $server);
            $fsocket = fsockopen($squid_params[0], intval($squid_params[1]), $errono, $errstr, 3);
            if(FALSE != $fsocket)
            {
                $head = "HEAD {$url_component['path']} HTTP/1.1rn";
                $head .= "Accept: */*rn";
                $head .= "Host: {$url_component['host']}rn";
                $head .= "Cache-Control: no-cachern";
                $head .= "rn";
                echo $head;
                fwrite($fsocket , $head);
                while (!feof($fsocket))
                {
                    $line = fread($fsocket , 4096);
                    echo $line;
                }
                fclose($fsocket);
            }
        }
    }
}
$g_squid_servers = array('192.168.2.88:80');
$flush_cache = new Flush_Cache_HTTP_Header_Impl();
$flush_cache->flush('http://ent.cdqss.com/index.html');
?>
继续阅读……

Squid的ACL分类

10 Jan 2010 Posted in  squid

在找http_status的acl用法时,看到这么一句“This clause supports both fast and slow acl types”。acl还分快慢呢~~赶紧去wiki看:http://wiki.squid-cache.org/SquidFaq/SquidAcl#Fast_and_Slow_ACLs 继续阅读……


client-cache-origin之间的session问题

09 Jan 2010 Posted in  CDN

昨天,突然接到某客户的邮件,表示他们质疑我们cache对其多originserver的轮询不均等,以至于影响到网站的访问。 听起来不是什么难题,把服务器上的DNSCache进程中止掉,不就能平均轮询了么?可是操作完成后,客户依然不认可……于是开始细细探讨具体的错误问题所在。 原来实际情况是这样:点击其网站的回复、收藏等动态页面时,时常会弹出错误页面。对这个错误页面,客户的解释是“session状态CDN加速未保留”。 由此解释,我觉得cache上的问题恰恰相反,正是因为均等轮询了导致的。而客户其他一些单源的域名服务正常,也证明了这点。 上cache服务器查看配置,使用的默认keep-alive设置,也就是对client和origin都开启了keep-alive,默认时间为2min。但实际上并没有起作用。在测试中,可以看到这样的日志: 继续阅读……


squid3新acl类型http_status试用(源站故障转向研究)

09 Jan 2010 Posted in  squid

今天试着自己编译安装了squid3.1,然后开始移植2.6的配置文件。在squid.conf.document(2.6里的squid.conf.default)里看了很久,发现不少新东西。跟转向有关的,便发现一个: 继续阅读……


虚拟机时间问题的机制原理及解决办法

05 Jan 2010 Posted in  cloud

对于CDN来说,时间是个非常重要的概念,squid的缓存刷新控制,全都是以服务器时间为基准。在我博客的前不知道几篇的某文中,就提到过因为时间的原因引起的刷新事故。而最新的一次,是公司在日志流量统计时,因为相差太大导致截取失败——这可都是钱呢。 实际工作中,大多会搭建一个NTP服务器,给应用服务器提供时间同步服务。但虚拟机在这方面有个问题。虚拟机的时间是读取的宿主机的硬件时钟,随便你date -s 1234怎么改,下一次date查看,都会恢复成原样。 这样看起来是个好事,因为这样可以省略掉大批机器的NTP服务器同步时间的压力。但糟糕的事情在后头:一大批重要客户的虚拟机,在运行上半年以上时间后,date都比真实时间超前了(偶然我也看到过一次滞后的)。或许是几分钟,或许是几小时!! 这一度让我很无奈,因为即使我重启虚拟机,这个诡异的date也依然倔强的按照它自己的时钟前进。看起来办法只有一个:把虚拟平台整个的重启——好在这种试验的结果是有效的,不然真不知道怎么办了。 从这个无奈的办法中,也应该可以推测出一个结论,虚拟机的时钟,应该是另有文件存储在虚拟平台的某个临时文件里。所以关闭虚拟机,该文件还存在并继续计时;重启动虚拟平台,该文件才会重计。至于这个文件叫什么,存放在哪里,一时半会我就找不到了,或许这个问题不算什么特别大的问题,至少我在linuxsir.org的《xen初学指南》中,没有找到关于时钟的配置说明。 不过再小的问题也顶不住人的研究。于是我找到了另一篇很对口的文章:《虚拟机中GUEST OS时钟(TIMEKEEP)问题的探讨》。 文章告诉我们:虚拟机的时钟,与真实机的时钟区别,其一在于其处理不是抢占中断而是延迟处理;其二在于其中断模拟软件可能因资源占用问题被推迟。 这两点区别,导致的结果却是一个,就是一旦服务器负载变高,时钟中断就被排到后头去了…… 文章也提出了解决办法,一个是编程,让系统补上中断的时间,这个俺就不说了;一个是修改内核,让系统不断修正date; 进一步问题:不管哪个办法,第一,加重了虚拟机负载;第二,这又依赖与系统去更新date的进程的精准度,而这个进程的中断时钟如果有偏差的话,…… 再进一步方法……有兴趣的还是自己点文章看吧。 看起来这个问题就要永远终结在此了。 不过变通的主意及时的出现了——既然虚拟机跟虚拟平台之间的异步时钟同步没法解决,我们就干脆不要虚拟机跟虚拟平台同步了。这样虽然对NTP的压力大了,但毕竟保证了CDN的正常。而且从上头的原理可以知道,能够导致date偏差到这个程度的原因,大概也是因为虚拟机的负载压力太大。事实上,我们为了保证冗余,也是尽量避免这种压力出现的。那么date偏差的服务器,其实也就是少数了。 顺着这个思路一查,原来办法其实很简单——修改虚拟机的independent_wallclock值即可: echo 1 > /proc/sys/xen/independent_wallclock 或sysctl xen.independent_wallclock=1 启用虚拟机独立系统时间; /etc/init.d/ntpd stop ntpdate 192.168.0.1 就能完成NTP时间同步了; 再date看看,时间果然就更正了~~ /proc下的文件都是进程使用中的文件,如果要让虚拟机开机自动读取配置,把这个修改写进/etc/sysctl.conf才行哦: echo “xen.independent_wallclock = 1” » /etc/sysctl.conf 就这么简单~~~ 继续阅读……


squid限速

01 Jan 2010 Posted in  squid

squid有个delay_pool,可以做限速,虽然效果不太准~(嗯,就像限制并发连接数的maxconn一样) 首先搬个老虎皮做大旗——《Squid: The Definitive Guide》的相关段落: 继续阅读……


squid请求处理流程(源站故障转向研究)

31 Dec 2009 Posted in  squid

今天继续想别的办法,第一,当然还是修改源代码,这个C++可惜俺不懂,只是大略的通过百大哥谷大婶知道了squid的请求处理流程: 继续阅读……


awk中让人郁闷的system()函数

30 Dec 2009 Posted in  bash

发现一个特尴尬的事实。我辛辛苦苦去百度资料,想用rewrite实现针对不同域名源站故障后的自动跳转功能,但整个思路里遗漏了一个严重的问题。 继续阅读……


squid3 的 gzip 支持

30 Dec 2009 Posted in  squid

标题很简单,内容很复杂,而且我也用不上。姑且存档吧: 原标题《VIGOS eCAP GZIP Adapter for SQUID Proxy Cache》 第一句话就让我很绝望,本插件只适用于squid3.1及以上版本——squid有比3.1更高的版本么——前文提到的有session控制的squid2.7我都还没看呢~哭 继续阅读……