分类 Tech Notes 中的文章

有趣的Winsock扩展

Winsock 大部分函数都是从 BSD socket 来的,不过 Winsock 做了不少扩展,其中有不少相当有趣。 1: 异步 Socket: 这个是 Winsock 的最大亮点,不过很多人都知道,就没有那么有趣了 2: ConnectEx 和 AcceptEx:这俩函数看起来是个批处理操作,比如 AcceptEx 就等于 accept + 一次 recv,这看起来很没道理,有必要这么兴师动众吗?其实不然,在高……

阅读全文

Apache 2精简版本

去掉所有 mod, 只用来作 pv log,同时用 icc 编译之 CC=icc CXX=icc AR=xiar LD=xild CFLAGS="-O3 -ipo -axKWP -funroll-loops -unroll256 -static -mcpu=pentium4 -mtune=pentium4 -march=pentium4 -fomit-frame-pointer -static-libcxa -cxxlib-icc -i-static -fno-exceptions -no-prec-div" LDFLAGS="-ipo -static" ./configure –with-mpm=leader –disable-access –disable-auth –disable-include –disable-env –disable-setenvif –disable-mime –disable-status –disable-autoindex –disable-asis –disable-cgid –disable-cgi –disable-negotiation –disable-dir –disable-imap –disable-actions –disable-userdir –disable-alias –disable-so –enable-nonportable-atomics=yes……

阅读全文

不要使用 cp 替换正在使用中的Linux 动态库

记得以前如果一个.so 被 load 了,应该和程序本身一样,不能覆盖啊,强行覆盖也不会覆盖原来的 inode,而是创建新的 inode 并替换当前目录里面的 inode, 原来打开的文件还是正确的。 但是最近发现在 Linux i386 上面 load .so 以后覆盖 .so ,没有任何提示,正在运行的程序退出时侯则通常都会 segfault. 和 sparc 很像了。 难道我记错了吗? 用 strace 看……

阅读全文

mod_extract_forwarded for lighttpd

今天花了一点时间,用 lighttpd 的 mod_skeleton.c 划拉了一个 mod_extforward.c 出来,功能类似 Apache 上面的 mod_extract_forwarded.c ,都是用来从 X-Forwarded-For 里面截取出来对方真实 IP 用,特别适合在 squid 后面的机器用,或者有人像我一样,爱好用 mod_proxy 穿来穿去的。不过这个 mod 功能弱很多就是了。 使用方法很简单 , 编译出来这个 module 并复制到 lighttpd 的 lib 目录里面。 在 lighttpd.conf 的 server.modules 里面加上 mod_extforward 配置类似下面这……

阅读全文

搞掉lighttpd好多LAST_ACK的状态了

终于想通既然只有 CLOSE_WAIT 状态会到 LAST_ACK ,不如干脆堵住 CLOSE_WAIT 产生的源头。于是关掉 lighttpd 的 keep alive , 果然一下就几乎没了。 不过不支持 keep alive 的 client 真的对 keep alive 的 server 杀伤这么大吗?小 s 家的 lig 上面就几乎没有 LAST_ACK 。为啥就我这里有。。……

阅读全文

今天对某站做的优化

1: 用 lighttpd 替换掉了一部分 apache 2: 给 php 加装了 eac 3: squid 增加了 epoll patch , 并用 icc ipo 编译 4: MySQL server 改跑 Max 的版本 但是似乎看不太出来改变啊。。。sigh……

阅读全文

用yum或者apt-get等包管理工具在线升级 rpm based Linux系统

爱好 debian 的 Linuxer 通常很看不上基于 rpm 的系统,和 debian 的 apt 系统比起来,RedHat 的 up2date 简直就是一个鸡肋,升级要账号不说,网络稍微有点毛病,就彻底卡死了。还不能建立个人镜像,每次都得从米国 redhat 的老家下,非常之慢。最重要的,up2date 并不支持 apt-get dist-upgrade 这样跨越 dist 的升级,装了 RH 7.3 这样的老系统,就只能一条……

阅读全文

用 icc ipo 编译 squid

其实就是要把 Makefile 里面的 ar 换成 xiar,这不是一个很难的事情,但是 squid 不知道用的什么版本的 autotools, 如果重新生成 Makefile 的话,会有很多乱七八糟的错误,而且还编译不过,因此最简单的办法是直接在 configure 之后,替换所有 ar 为 xiar 就好了 configure 参数我用的这个 CC=icc CXX=icc CFLAGS="-O3 -ipo -axKWP -funroll-loops -unroll256 -mcpu=pentium4 -mtune=pentium4 -march=pentium4 -fomit-frame-pointer -static-libcxa -cxxlib-icc -i-static -fno-exceptions -no-prec-div" ./configure –enable-epoll –prefix=/var/test/squid –enable-storeio=“aufs,ufs,diskd” –with-aufs-threads=3 –with-pthreads –enable-removal-policies=heap,lru –disable-delay-pools –enable-underscores –disable-ident-lookups –enable-time-hack –enable-cache-digests –disable-forw-via-db 然后简单……

阅读全文

用 swig 给脚本语言做 wrapper

工程里面有时候需要将某些 C 或者 C++编写的模块封装成脚本语言的扩展,以便在脚本语言里面调用,这个工作通常很枯燥,会写出来很多重复代码,人一向都是会偷懒的动物,因此就诞生了一些工具来帮助人们做这件事情,其中比较有名的就是 swig, 此外还有 boost::python 等,不过我觉得还是 swig 最好,因为他可以同时支持很多种……

阅读全文

升级到 php 5

看起来好像没有任何不同,本来也是。我本来就没有用什么奇怪的配置么。只有 mysql 需要单独 –with 一下 Update: 测试一下……

阅读全文