繁体   English   中英

如何对非常慢的Perl脚本进行故障排除,该脚本在一台服务器上运行得快而在另一台服务器上运行得慢

How to troubleshoot very slow perl script that runs faster on one server but slow on another

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我收到了一个perl脚本,该脚本应该用于过滤Hi-C数据的探针,但是运行缓慢(几天)。 一位给我脚本的人告诉我,它在她以前的实验室的服务器上只花了几个小时,所以我想知道是什么会导致运行时间如此不同,以及如何使它运行得更快? 我对perl的了解非常有限,但是到目前为止,我的Google搜索表明我可能需要更改一些perl配置文件? 以下是整个脚本中花费时间最长的主要功能,输入文件包含染色体目标和位置。 任何帮助将不胜感激!

我曾尝试使用perl 5.16和5.26来运行,以查看该版本是否太旧,但是花了很长时间。

sub get_restriction_fragments_for_targets {

    my @targets = @_;

    # Split by chromsome and sort
    my %targets;

    foreach my $target (@targets) {
            push @{$targets{$target->{chr}}},$target;
    }

    foreach my $chr (keys %targets) {
            my @sorted = sort {$a -> {start} <=> $b -> {start}} @{$targets{$chr}};

            # We also need to merge overlapping capture regions

            my @merged;

            my $last_region;

            foreach my $region (@sorted) {
                    unless ($last_region) {
                            $last_region = $region;
                            next;
                    }

                    if ($region->{start} < $last_region -> {end}) {
                            # Merge
                            if ($region ->{end} > $last_region->{end}) {
                                    $last_region->{end} = $region->{end};
                            }
                            next;
                    }

                    push @merged,$last_region;
                    $last_region = $region;
            }

            push @merged,$last_region;

            $targets{$chr} = \@merged;
    }

    my @target_fragments;

    open (IN,'all_restriction_fragments.txt') or die $!;

    my $last_chr = "";
    my $last_index = 0;

    while (<IN>) {
            chomp;
            my $line = $_;

            my ($chr,$start,$end) = split(/\t/);

            if ($chr ne $last_chr) {
                    warn "Moving to $chr\n";
                    $last_chr = $chr;
                    $last_index = 0;
            }

            next unless (exists $targets{$chr});

            my @local_targets = @{$targets{$chr}};

            foreach my $index ($last_index .. $#local_targets) {
                    my $target = $local_targets[$index];

                    if ($target -> {end} < $start) {
                            $last_index = $index;
                            next;
                    }

                    if ($target -> {start} > $end) {
                            last;
                    }

                    push @target_fragments,{
                            id => $target->{id},
                            chr => $chr,
                            start => $start,
                            end => $end,
                    };
                    last;
            }
    }

    return @target_fragments;
}
1 个回复

首先,您不能不知道很多有关该问题的信息,首先是有关数据结构和已处理文件的大小。

这是关于代码似乎正在做什么的原则上最耗时的操作的一般性评论,重要性和/或可能性的降序是(可能)递减

  • 文件有多大? 那是磁盘访问,可能需要任何时间

  • 循环排序-正在排序的数据有多大? sort耗时

  • @sorted周围有“踢踏舞”,它会导致数据复制-多少数据?

  • 通常,有很多数据复制-@ @targets传递给例程的大小是@targets

如您所见,每个因素都伴随着数据量的问题。 磁盘访问当然是昂贵的,但是在程序中各种数据结构之间进行大量数据复制同样重要。

因此,如果您可以提供一些详细信息,这将有助于我们为您提供更详细的分析/猜测。

1 查询在一个数据集中运行较慢,而在另一个较大的数据集中运行较快; MSSQL服务器; 不同的执行计划。 为什么?

这是查询: 以下两个数据集均适用 最新统计; 索引已碎片整理 两个数据集的常规属性是相同的:例如:排序规则; 同样,这两个数据集具有大约相同的数据量。 实际上速度更快的人拥有更多数据 现在,在1个数据集中运行大约需要8秒钟,而在另一个数据集中运 ...

2 如何解决慢速linux服务器问题

我在GoDaddy有一个专用服务器,这是我一个月前买的。 我将我的网站迁移到服务器,它运行顺畅。 直到昨天,服务器运行速度很慢。 即使交通缓慢。 我尝试联系GoDaddy获取服务器支持。 但是,他们说他们对专用服务器的访问权限有限,因为我们的服务器管理员应该是检查问题的人。 不幸 ...

3 如何解决非常慢的python代码

我有一个处理大量文件的python脚本。 对于每个文件,脚本逐行查找特定的RegEx模式。 如果找到了模式,则将该行复制到日志文件中。 作为示例输入,我将一个包含42个小文件和3个大文件(每个〜1500行)的文件夹传递给它。 脚本非常快速地处理了前两个大文件-它们需要几秒钟的 ...

4 Kafka在OpenStack上非常慢/无响应-如何解决

我正在努力创建一个小的Kafka集群,作为使用Openstack的私有云上​​更大的管道的一部分。 简而言之,即使部署在Openstack的某个节点上,即使在最基本的方案中,我也无法及时获得Kafka(0.8.2.2或0.9.0.0)的响应。 给单个Ubuntu 14.04服务器加注后: ...

5 R脚本在vmware上运行非常慢

我们有一个测试R脚本,该脚本可以在PC笔记本电脑上运行约15秒钟,在9岁的Mac上也可以运行。 在运行Windows 2012 R2的多台vmware服务器上,完全相同的测试需要1到15秒到2分钟,具体取决于服务器。 因此,要删除尽可能多的变量,我们创建了一个带有Windows 2012 R ...

2018-01-22 23:04:11 0 131   r/ vmware
6 手工编码的UI脚本运行非常慢

我正在使用编码的UI来自动化脚本。 我是C#的新手,我能够在编码的UI中编写手动编码的浏览器脚本,并且通过了测试,但是脚本的执行速度非常慢。 我认为必须禁用某种线程。 有人可以帮助解决问题吗?谢谢,卡拉维尼 ...

8 脚本通过计划任务运行非常慢

我的PowerShell脚本从IP摄像机获取快照,它在具有Windows 10 IoT核心版的Raspberry Pi3上运行。 当我从PowerShell运行脚本(仅键入c:\\scripts\\snapshot.ps1 )时,它运行得很好。 但是,当我从cmd powershell ...

9 Perl脚本执行时间很慢[关闭]

我有一个perl程序( /usr/bin/ckbcomp ),在新安装的debian v8服务器上执行得非常慢。 我在调试很长的启动时间时发现了它。 我在没有问题的另一台服务器上比较了同一脚本的执行情况,最终得出的结果是它们具有准确的内核空间执行,并且问题似乎出在用perl编写的用户级代 ...

10 Reporting Services报表在一台服务器上运行缓慢,而在另一台服务器上运行很快

我有一个奇怪的问题。 我有一个相同的代码库,并在两个不同的服务器上报告。 服务器A在2秒内运行报告。 服务器B在15秒内运行报告。 运行SQL事件探查器时,每个存储过程的持续时间是相同的。 但是,进程的结束时间不同。 服务器B似乎在过程之间还有其他事情发生,因为proc的结束时间 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM