发现自己写的跳板程序,连接总是很慢。慢到没法接受了,远程主机连接都要 10 多秒,只有自己动手来解决。因为我一直是使用的 Net::SSH::Perl 。还是只能基于这个模块来修改。因为接口之类最完善,也最 Perl 化。

其实我个人非常喜欢 Net::SSH2,因为速度非常快,不过接口是在没法接受。

在处理连接慢之前,其实都查过网上所有的其它同学写的文章了,大家一致认为是 Math::BigInt、Math::BigInt::GMP 和 Math::BigInt::Pari 这几个模块没装的原因。然后我发现我都安装了,还使用 cpanm 来重装了一次。结果没有变化。只能自己来追原因了。

我使用 @CGI.NET 同学推荐的 NYTProf 来跟程序到底那个地方慢。然后打开 HTML 来看看。

我们看到,第一个地方花了 21 秒,就用在连接的上面,点开接着查看源代码,最后测试是下面这段代码有问题。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sub _create_socket {
    my $ssh = shift;
    my $sock = gensym;
    my ($p,$end,$delta) = (0,1,1); # normally we use whatever port we can get
       ($p,$end,$delta) = (1023,512,-1) if $ssh->{config}->get('privileged');
    # allow an explicit bind address
    my $addr = $ssh->{config}->get('bind_address');
    $addr = inet_aton($addr) if $addr;
    ($p,$end,$delta) = (10000,65535,1) if $addr and not $p;
    $addr ||= INADDR_ANY;
    for(; $p != $end; $p += $delta) {
        socket($sock, AF_INET, SOCK_STREAM, getprotobyname('tcp') || 0) ||
            croak "Net::SSH: Can't create socket: $!";
        last if not $p or bind($sock, sockaddr_in($p,$addr));
        if ($! =~ /Address already in use/i) {
            close($sock) or warn qq{Could not close socket: $!\n};
            next;
        }  
        croak "Net::SSH: Can't bind socket to port $p: $!";
    }  
    if($p) {
        $ssh->debug("Allocated local port $p.");
        $ssh->{config}->set('localport', $p);
    }  
    $sock;
}

因为我是使用 root 用户,所以默认的这个时候加了一个 bind 来对客户端端口进行绑定。这个时候因为 root 用户,所以是绑定的 1024 端口以后。我单独给上面的代码拿出来测试时,发现在最简单的 socket 的连接上。只要 bind 的端口小于 1024 都会非常非常慢。原因未知,我也没法解决。
使用 strace 来跟的时候,发现也是停止在这个绑定以后的连接。只要加了 bind 连接就常常超时。

1
2
bind(3, {sa_family=AF_INET, sin_port=htons(1023), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("xxx.xxx.xxx.xxx")}, 16

以我对 TCP/IP 的理解,好象没法解决这个问题了,原因只能靠大家来解决了。
我只能让整个流程绑定的端口指向 1024 以上,这种变态的方式来解决。也就是默认在 new 这个 Net::SSH::Perl 的对象的时候,加上一个 privileged => 0,来让我绑定都是以 1024 以上来绑定端口自由分配。
在这个地方做做记录,如果有相同的同学也发现自己写的 Net::SSH::Perl 很慢,可以考虑一下是不是相同的问题。

Net::SSH::Perl 连接远程主机慢的原因相关推荐

  1. windows上SSH服务连接远程主机失败

    putty连接出现错误提示"Network error:connection refused",xshell连接出现错误提示"connection failed:(por ...

  2. ssh连接远程主机执行脚本的环境变量问题

    http://www.kuqin.com/shuoit/20141113/343188.html 近日在使用ssh命令ssh user@remote ~/myscript.sh登陆到远程机器remot ...

  3. Net::SSH::Perl 模块

    <pre name="code" class="python">Net::SSH::Perl - Perl client Interface to ...

  4. Centos 7无法SSH远程连接及解决方法

    Centos 7无法SSH远程连接及解决方法 小土豆Linux学习随笔 -- 清听凌雪慕忆 ​ 以前运维中,服务器或者虚拟机安装完Centos 7系统,配置网络设置后即可利用SSH远程.昨夜,怪哉,不 ...

  5. 使用 Windows Terminal 连接远程主机

    使用 Windows Terminal 连接远程主机 Intro Windows Terminal 是微软新推出来的一个全新的.流行的.功能强大的命令行终端工具.包含很多来社区呼声很高的特性,例如:多 ...

  6. SSH 远程连接服务慢的解决方案

    SSH 远程连接服务慢的解决方案 连接慢的主要原因是DNS解析导致 解决方法: 1.在ssh服务端上更改/etc/ssh/sshd_config文件中的配置为如下内容: UseDNS no # GSS ...

  7. Perl的Net::SSH::Perl模块实现远程登陆ssh

    执行cpan命令安装模 cpan install Net::SSH::Perl 选择SSH版本,直接默认即可 选择使用的加密方式,也是默认 默认回车同意安装 接下来你会看见很多地方让你选择yes或者是 ...

  8. idea连接远程主机

    idea连接远程主机,方便我们在开发过程中,从远程主机拷贝或者上传文件,并且还可以直接在idea上写远程主机DockerfIle,只需提交即可完成.很方便我们部署. 下面是我们连接步骤 第一步打开id ...

  9. vultr服务器可以ping通但是ssh无法连接问题

    今天在vultr上面新建主机的时候,碰到可以ping通但是用ssh无法连接的情况,搜索一圈发现似乎还是一个挺常见的现象. 这种现象的原因有可能是端口被墙.具体产生的原因这里就不说了. 判断方法 如何确 ...

最新文章

  1. star ccm+ 用户指南_star-ccm边界层处理方法
  2. 全球充电最快手机:5分钟回血50%;华为未发布新手机 | MWC 2022
  3. 脚本安装smokeping
  4. loadrunner之socket协议脚本编写
  5. framebuffer驱动
  6. Daily tips-7月
  7. 如果redis没有设置expire,他是否默认永不过期?
  8. 股东控股关系图谱简化版
  9. python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
  10. 安卓超级压缩管理器(ZArchiver) 汉化版 v0.5
  11. 【无标题】adsa da das
  12. Required request body is missing:ParameterException解决方法
  13. 阿里P5的测试开发工程师,都有哪些要求?
  14. 事件研究法python代码
  15. #10019. 「一本通 1.3 例 2」生日蛋糕
  16. sqlite优化简单分析
  17. Hadoop 命令操作大全
  18. Zabbix系列:zabbix trapper工作机制
  19. oss图片上传api_怎么上传图片到OSS
  20. Android APP一键退出的方法总结分析

热门文章

  1. AAuto如何设置定时器
  2. 实习笔试题,源代码编译
  3. ​Linux进程管理工具
  4. Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
  5. “页面制作人员”?“页面工程师”?“页面架构师”?滚一边去!
  6. 研究人员发现针对印度军队的网络间谍活动
  7. BZOJ1787 Meet紧急集合
  8. Linux系统配置kvm+vlan
  9. 怎样快速运用KeyShot 6 鼠标视图操作
  10. phoenixframework 自动化测试平台 1.4.8 版本发布