免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sandy_ye_1981
打印 上一主题 下一主题

问个mod_perl的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-05 21:45 |只看该作者
原帖由 兰花仙子 于 2007-3-5 21:33 发表


那你就加一段eq 'GET'的逻辑嘛...


加了也一样..值都是GET

论坛徽章:
0
12 [报告]
发表于 2007-03-05 22:05 |只看该作者
仙子.为什么我修改后..之前的页面又出来了.

论坛徽章:
0
13 [报告]
发表于 2007-03-05 22:24 |只看该作者
原帖由 sandy_ye_1981 于 2007-3-5 22:05 发表
仙子.为什么我修改后..之前的页面又出来了.


stop再start了嘛?偶觉得这样一问一答真搞笑..而且又未切实际.
mod_perl的debug往往麻烦.可能要详看下你的codes了..

论坛徽章:
0
14 [报告]
发表于 2007-03-05 22:30 |只看该作者
原帖由 兰花仙子 于 2007-3-5 22:24 发表


stop再start了嘛?偶觉得这样一问一答真搞笑..而且又未切实际.
mod_perl的debug往往麻烦.可能要详看下你的codes了..



你这样一说.我估计我的眼泪哗哗的

论坛徽章:
0
15 [报告]
发表于 2007-03-05 22:55 |只看该作者
插个嘴:好羡慕 Perl 的字串处理能力……

论坛徽章:
0
16 [报告]
发表于 2007-03-05 23:18 |只看该作者
原帖由 Iamlangue 于 2007-3-5 22:55 发表
插个嘴:好羡慕 Perl 的字串处理能力……

没时间羡慕...学的话最好shell->perl->php下来..
不过.开始这样学的话.难度比较大

论坛徽章:
0
17 [报告]
发表于 2007-03-06 01:07 |只看该作者

调试的时候要restart Apache

这和mod_perl的工作方式有关,开始时我也遇到这个问题,后来看了Apache mod_perl的工作方式后明白了:当接收一个请求时,Apache会打开一个进程来处理这个请求,处理完成后该进程并不会结束,而是进入等待状态,为以后请求作准备;当再有一个请求时,Apache有2种策略:使用刚才处理请求的进程或打开一个新进程,这和配置有关系,因为Apache设计就是为大站工作的,所以更趋向于打开更多的进程(预备),当进程达到某一个值(例如8的倍数)时,如果当前的进程能够满足客户请求就不会再打开新的进程了,按某种算法循环使用现有的进程,不能满足时继续打开进程,直到最大配置数为止。
这里问题就来了,和CGI程序不同,mod_perl的script是编译一次,重复执行的,和Apache的进程同在,和楼主的描述一样:
1、没有申请某脚本时,和Apache相关的进程中没有该脚本的编译。
2、当申请某脚本时,负责该请求的Apache子进程装入/编译/运行该脚本,但由于是mod_perl脚本,所以并不丢弃该编译,保留为以后运行。[版本1]
3、修改了脚本,但先前运行该脚本的Apache子进程根本就不知道,她保留的编译是这次修改前的。
4、新请求该脚本,Apache会随机分配一个进程来处理这个请求(不够聪明吧,为什么不找回原来处理过该脚本的进程呢?),如果该进程没有编译过该脚本,则做和[2]一样的工作,客户端得到的是版本2的结果;如果恰好分派到原来处理过的进程,她发现申请的是相同的脚本,就不再重新编译了,直接运行原先的编译,就是[版本1]了。

由上看出,在调试状态下不断修改脚本,不断浏览调试时就会出现“奇怪”的现象:有时得到的是修改后的版本,有时得到的是修改前的版本,怪吓人的。其实对于Apache和mod_perl来说是合理的,一个大压力的WebServer要做的事情很多,很难使用复杂的算法和“聪明”的跟踪措施来调试脚本,何况在生产条件下谁没事经常修改脚本呢?所以如果你在调试mod_perl脚本又想每次得到最新版本,最有效的方法是restart一次Apache,否则就看你的运气了。

论坛徽章:
0
18 [报告]
发表于 2007-03-06 08:07 |只看该作者
最有效的方法是restart一次Apache,否则就看你的运气了


根据偶的经验,多数情况下restart都没有用.最有效的就是完全stop再sleep 5再start Apache.

论坛徽章:
0
19 [报告]
发表于 2007-03-06 11:40 |只看该作者
原帖由 perlpg 于 2007-3-6 01:07 发表
这和mod_perl的工作方式有关,开始时我也遇到这个问题,后来看了Apache mod_perl的工作方式后明白了:当接收一个请求时,Apache会打开一个进程来处理这个请求,处理完成后该进程并不会结束,而是进入等待状态,为 ...




首先..太感谢你了.perlpg.说得这么详细..但我restart的效果好像没有.仙子说得那种也没有..

而你说的.可以把以前的进程kill掉..我怎么找呢...还有就是我可不可以在配置文件配置很低的客户请求数..让
apache每次都为请求产生新的进程呢..

请教...仙子....你也看看嘛.我要哭了

论坛徽章:
0
20 [报告]
发表于 2007-03-06 11:45 |只看该作者
原帖由 perlpg 于 2007-3-6 01:07 发表
这和mod_perl的工作方式有关,开始时我也遇到这个问题,后来看了Apache mod_perl的工作方式后明白了:当接收一个请求时,Apache会打开一个进程来处理这个请求,处理完成后该进程并不会结束,而是进入等待状态,为 ...



还有一个就是.你说你以前也碰到过这问题..那么后来是怎么解决的呢.求教.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP