洛阳铲的日志

2008年01月17日

再次质疑Django+M od_python时对环境 变量的处理

Filed under: Apache,django,Python — HackGou @ 12:12

今天在升级一个django开发的系统到V2的时候,
发现~/无法正确的展开成 /home/hackgou.(apache是以hackgou帐号执行的,)
也不会展开成/root(apache是以root启动的) 觉得非常奇怪,
就算是用os.path.expanduser(‘~/’)也无济于事。 于是怀疑是os.envrion[‘HOME’]不对,
因为expanduser是需要这个变量来展开~/的。 于是使用setenv HOME /home/hackgou/ 可是也不工作,
后来在django/core/handlers/modpython.py的ModPythonHandler中 发现Django开发组已经注意到,
mod_python不理会apache的setENV指令:
# mod_python fakes the environ, and thus doesn’t process SetEnv. This fixes that
os.environ.update(req.subprocess_env)

但是这个和SetEnv DJANGO_SETTINGS_MODULE app.settings 自相矛盾矛盾,真晕,
自己不设置正确的,也不搭理管理员指定的,怎么办?
后来在http://code.google.com/p/modwsgi/wiki/ApplicationIssues找到一些类似的情况,
提到sudo的时候有bug,会导致HOME和root启动的HOME不一样,太好了,我就要这样的bug。
设置hackgou账号的sudo权限,然后用sudo来启动apache,果然所有的expanduser(‘~/’)都顺利。
除此之外, 文中提到
import os, pwd os.environ[“HOME”] = pwd.getpwuid(os.getuid()).pw_dir
这样的代码,似乎可以解决这个问题,神啊,我很反感这种做法:
1.django中似乎没有地方可以放置这样的需要这个APP都需要的代码,我的DRY啊
2.Django修改环境变量似乎成了习惯,之前碰到个TIME_ZONE的问题,就是因为修改了APACHE的环境变量,
导致 别的应用环境受到污染,要知道一个apache进程是很多应用共享的, 除了Djano还有别的应用,
比如别的Django应用或者PHP,都有可能在一个相同的APACHE进程空间中处理,
说有可能是因为apache本身的一些设置会出现这些差别,跟py没有关系, 这样会导致他们的工作环境受到污染。
这似乎没有好的方法可以解决这个问题, 对Django或者说对mod_python 的这种拖泥带水的做法感觉非常的不爽。
也不知道有没有更好的更彻底的解决方法?
如果谁知道,能够告诉我那是最好不过的了

2007年11月22日

Apache乱码问题

Filed under: Apache,PHP — HackGou @ 00:09

很多时候,浏览器并不按照指定的编码来显示页面。 导致乱码。其实这和http头中的设置有很大关系:
Content-Type: text/html; charset=utf-8
当http头中有这一行的时候,浏览器总是按照这个头指示的编码来显示页面内容,
而忽略Meta tag中的设置。如果Meta和Content-Type 的charset一致时,一切都是正常的,
而一旦不一样,那就会出现问题。
而apache本身是可以通过AddDefaultCarset XXX来来设置 http头中的默认字符编码,
同时当apache和php在一起的时候,还有php.ini的一个设置会影响这个http头的默认编码:
default_charset = “utf-8”
而这个default_charset 的设置会覆盖apache的AddDefaultCarset配置,
当然也可以在每个php里面手动调用
header(“content-type:text/html; charset=xxx”)
来覆盖default_charset 的值,这么看来一共有四个地方 会对php的执行结果产生影响: 优先级别从高到低:
php的header(“content-type:text/html; charset=xxx”)函数
php.ini里面的default_charset 设置
httpd.conf 中的AddDefaultCarset设置
最后才是html代码中的:META tag
其实最简单的办法是把php.ini中的default_charset和httpd.conf中的AddDefaultCarset置空。 通过Meta tag来指定编码,header只是临时性的改变编码的最后关口。

2007年09月28日

httperf原来这么猛

Filed under: Apache,Linux,web — HackGou @ 05:06

httperf 和ab是两个web benchmark的好工具。
今天为了测试美国的两个站点的响应,把httperf的 –num-conn 设成
5000。结果不到10分钟,nagios的警报就发到手机上了:有4台服务器负载告急!简直不可思议:服务器是7台webweb加12台db组成的集群。而这个命令行只是在一台普通的pc
server上面执行的。对着其中的一台服务器做日志分析:

0 : 918 3.23%
1 : 470 1.65%
2 : 427 1.50%
3 : 1253 4.41%
4 : 878 3.09%
5 : 512 1.80%
6 : 467 1.64%
7 : 511 1.80%
8 : 557 1.96%
9 : 603 2.12%
10 : 662 2.33%
11 : 531 1.87%
12 : 466 1.64%
13 : 470 1.65%
14 : 475 1.67%
15 : 497 1.75%
16 : 470 1.65%
17 : 521 1.83%
18 : 598 2.10%
19 : 535 1.88%
20 : 574 2.02%
21 : 551 1.94%
22 : 630 2.22%
23 : 520 1.83%
24 : 533 1.88%
25 : 469 1.65%
26 : 456 1.60%
27 : 518 1.82%
28 : 440 1.55%
29 : 543 1.91%
30 : 573 2.02%
31 : 602 2.12%
32 : 565 1.99%
33 : 556 1.96%
34 : 499 1.76%
35 : 495 1.74%
36 : 495 1.74%
37 : 483 1.70%
38 : 487 1.71%
39 : 491 1.73%
40 : 473 1.66%
41 : 460 1.62%
42 : 480 1.69%
43 : 476 1.68%
44 : 455 1.60%
45 : 467 1.64%
46 : 450 1.58%
47 : 479 1.69%
48 : 522 1.84%
49 : 517 1.82%
50 : 526 1.85%
51 : 508 1.79%
52 : 301 1.06%
第一列是12点到13点的60分钟序号,第二列是这一分钟内服务器处理的请求,第三列是这一分钟处理的请求在这一个钟头内的百分比,特别关注的是12:00和
12:03分,这个时间正是做benchmark的时间点,这些请求都是针对首页做的的请求,非常出人意料!httperf原来这么猛!这恐怕要比n多DDOS
kit都厉害吧 :D

2007年01月20日

p spell和recode居然会让php5挂掉?

Filed under: Apache,FreeBSD,PHP,port,server — blog @ 12:54

从port安装的php5和extension中,pspell和recode两个扩展居然会导致php 挂掉,
有些不可思意,也许是 这两个扩展需要额外的lib没有安装,引发经典的库依赖问题??
;extension=pspell.so
;extension=recode.so
还好,这两个扩展根本用不到,注释之
不能从根本上解决问题,那让问题根本不会出现,未尝不是一个根本上解决问题的法子 :P

2006年11月9日

除了apache还有什么?

Filed under: Apache,lighttpd,Linux,Mathopd,server,SRR,TUX,web — HackGou @ 22:12
作为开源的web server apache2可谓占尽天时地利人和:不仅开源社区的人对他顶礼膜拜,乃至
其他平台的的web server也敬他三分。
但是到底在开源阵营中还有些什么出色的web server呢?
 
首先映入眼帘的是lighttpd:
http://www.lighttpd.net/
lighttpd的兴起,和rails密不可分。
lighttpd+ SCGI (SRR)是rails社区公认的不二选择。
SCGI作为fastCGI的天然替代物,对所有支持 SCGI协议的web server都可以实现无缝移植。
其实除了SCGI之外,类似php的mod_php、ruby也有apache的 mod_ruby。也可以和apache
集成,当然这是apache dependent的。
 
在性能方面,普遍的说法是lighttpd比apache2快过4、5倍,lighttpd官方的说法也是快过2、3倍
当然也有人嚷嚷:lighttpd在扯蛋 (当然我们得注意一下这家伙的背景)
真是公说公有理、婆说婆有理
 
另外还有一个thttpd,性能也非常出色
http://www.acme.com/software/thttpd/benchmarks.html

serverperf.gif

实线部分是处理处理1000个1kB大小的文件,Java实现的Acme.Serve和Jigsaw连测试都没有承受住,
就挂了。  :P
虚线部分是使用很简单的CGI hello world" C program.作为CGI测试的。
在这份benchmark中,出现了另外一个BSD license的web server:Mathopd 优秀的CGI性能简直让人大跌眼镜
但是不知道真实的生产环境性能如何!
 
说道静态文件服务,不得不提一下TUX
虽然没有具体的数据说明TUX的性能个到底如何,但是业界广泛认为:作为运行于内核空间的TUX,由于少了
content切换的开销,相比其他用户空间的web server比如apache反应快速的多,另外Red Hat给他的学名儿
叫:Red Hat Content Accelerator 。所以提供image之类的服务是在适合不过的了,但是也正是因为这个最大
的优势限制了他在其他平台的使用,是一个linux dependent的web server。同时,运行于内核空间的他,
一旦crash,后果可想而知。
 
更多的web server list可以参考这儿:
Older Posts »

Powered by WordPress