免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5476 | 回复: 22
打印 上一主题 下一主题

perl脚本占用资源比较大,怎么找原因呢? [复制链接]

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-06 17:33 |只看该作者 |倒序浏览
一个日志分析的perl脚本,主要就是提取日志中的url地址,去除重复后存储记录进另一个文件里。感觉不复杂的过程,但执行起来经常占用掉80%以上的CPU。
初学perl,请教各位,有没有什么排查思路呢?

论坛徽章:
0
2 [报告]
发表于 2010-05-06 17:34 |只看该作者


正则写得垃圾?

论坛徽章:
0
3 [报告]
发表于 2010-05-06 17:47 |只看该作者
读取文件是否太“贪婪” ?
是否大量全局变量?
是否优化流程?
是否频繁打开句柄?

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
4 [报告]
发表于 2010-05-06 19:17 |只看该作者
正则写得垃圾?
黑色阳光_cu 发表于 2010-05-06 17:34



    这个影响大么?

日志举例如下:
1273144492.670      9 121.14.225.183 TCP_IMS_HIT/304 236 GET http://www.ggv.com.cn/downfiles/20070815_135941_1.rar - NONE/- text/plain "http://down.ggv.com.cn/down/cnt_n_down.php?id=698400&flag=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
脚本里相关部分是:
my $log_pattern   = qr '^.*?\d+\s+\w+\s+(http:\/\/.+?)\s+.+';
if (-f $access_log) {
    open(ACCESS_FH, $access_log) or safe_exit("Cannot open file: $access_log");
    while (<ACCESS_FH>) {
        next unless /$log_pattern/i;
        $url_table{$1}++;
    }
    close(ACCESS_FH);
}

因为脚本是其他部门提供的,我也不太明白为什么他们写成^.*?这个样子……

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
5 [报告]
发表于 2010-05-06 19:23 |只看该作者
读取文件是否太“贪婪” ?
是否大量全局变量?
是否优化流程?
是否频繁打开句柄?
Osment 发表于 2010-05-06 17:47



    多谢大哥,有时间的话能稍微详细讲解一下这几问么?

论坛徽章:
0
6 [报告]
发表于 2010-05-07 01:18 |只看该作者
多谢大哥,有时间的话能稍微详细讲解一下这几问么?
chenryn 发表于 2010-05-06 19:23

呃。贪婪说的是一次性读入, 比如 @lines = <FILE>  样式。 但是我看见你用了 while (<F>) 逐行。
说白了,这样的东西只能说成这样了,Perl 处理文本是长项。 要效率无非是 算法的优化罢了。

PS :正则里面 ^ 匹配句头。 建议 加上 /oi 。。

论坛徽章:
0
7 [报告]
发表于 2010-05-07 09:40 |只看该作者
{:3_193:}哈希太大。。。

论坛徽章:
0
8 [报告]
发表于 2010-05-07 09:47 |只看该作者
回复 6# Osment


    路过

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
9 [报告]
发表于 2010-05-07 10:22 |只看该作者
呃。贪婪说的是一次性读入, 比如 @lines =   样式。 但是我看见你用了 while () 逐行。
说白了,这样的 ...
Osment 发表于 2010-05-07 01:18



    多谢多谢~~~

论坛徽章:
1
狮子座
日期:2013-11-13 22:28:35
10 [报告]
发表于 2010-05-07 10:28 |只看该作者
哈希太大。。。
toniz 发表于 2010-05-07 09:40



    呃,现存的url目前大概有四百万条吧。已经运行了一段时间,现在新增的估计不会太多。
   有别的好办法么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP