工作中遇到的apache问题

血的代价换来的对apache性能的理解:
简单来说,这次遇到两个问题:
1 mpm工作模式:目前最流行的模式是perfork(非线程)模式和worker(线程)模式
因为线程自身的问题,自然perfork比worker模式要安全,并且在简单的情况下具有更快的速度(减少了线程的开销),但是对于繁忙的应用,worker模式由于具有更低的内存消耗,所以能支撑更多的请求。
编译:
--with-mpm=work
httpd.conf:
<IfModule worker.c>
StartServers 32
MaxClients 6400
ServerLimit 100
MinSpareThreads 256
MaxSpareThreads 1024
ThreadsPerChild 64
MaxRequestsPerChild 100000
</IfModule>
这样,就限制了最多允许同时处理6400个请求,根据模块的不同,这个极限值还可以增加
而当使用perfork的时候,必须要修改apache的源码才能修改上限值
如果不做限制,apache会不停增加进程数,直至耗尽系统资源为止

2 一个自定义的module,原先是在32位下编译并运行的,由于32位解释long int的极限是32位,不满足需求,因此代码里用了long long int型。相当的打印为"%lld",
现换在64位机器上重新编译时,由于64位机器,编译long int 为64位,因此改为"%ld"即可。但是问题来了:
如果编译apache mod采用apxs来编译,则必须改为"%ld",如果继续采用"%lld",则如下代码:
unsigned char * idstr = apr_psprintf(r->pool,"%lld",id);
结果是:%ld
而不是id的真实值
如果采用gcc来编译,是不会有这个问题的,估计是apxs的一个bug
版本:apache2.2.9

这个bug....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值