libssh2 - 频道读取正在挂起

时间:2015-11-09 16:44:59

标签: c perl ssh libssh2

我目前正在使用perl开发远程作业调度程序。 它必须通过ssh连接到x服务器并执行已定义的作业/作业组。

我使用Net:SSH2,它建立在libssh2上。

我的程序通常可以和400/500服务器一样正常工作,但是当我尝试在1000台服务器上运行基本的uptime命令时,我的一个或多个线程挂起并且永远不会完成,或者就像30分钟之后。

它是随机的:有时它会按时完成,有时则不会。

我将此问题跟踪来自此Net :: SSH2命令:$in .= $buf while $chan->read( $buf, 10240 );

以下是连接的完整代码:

my $chan = $this->{netssh2}->channel() or die $!;
$chan->blocking(1);
$chan->exec($command);
my ($in,$err,$buf,$buf_err);

$in .= $buf while $chan->read( $buf, 10240 );
$err .= $buf_err while $chan->read( $buf_err, 10240, 1 );

$chan->send_eof;
1 while !$chan->eof;

$chan->wait_closed;

然后我下载了一个Net :: SSH2源包并修改了C-perl链接(xs)文件。 它告诉我问题来自这一行: count = libssh2_channel_read_ex(ch->channel, XLATEXT, pv_buffer, size);

此命令随libssh2库一起提供:https://github.com/NLog/NLog/wiki/How-to-Log-Exceptions

有时(约1000次)该程序进入此读取并且永不离开。受影响的服务器大多数时间都是不同的。

你知道我应该寻找/检查什么吗? 我已经在这方面工作了几天,我非常喜欢外部建议:)

0 个答案:

没有答案