gpt4 book ai didi

ssh - ***检测到缓冲区溢出***/usr/bin/expect终止

转载 作者:行者123 更新时间:2023-12-02 14:17:17 28 4
gpt4 key购买 nike

我正在运行一个tcl脚本,该脚本调用到多个服务器的ssh session ,并使其保持 Activity 状态以便进一步操作。但是在将ssh传输到1023服务器后,我得到了以下错误。

enter image description here

我已经将软限制和硬限制设置为较大的值,但是仍然没有运气。

以下是服务器 limit.conf 详细信息以及我尝试过的多个选项。

Ulimit -a

核心文件大小(块,-c)0

数据段大小(千字节,-d)无限制

调度优先级(-e)0

文件大小(块,-f)无限

待处理信号(-i)31189

最大锁定内存(千字节,-l)64

最大内存大小(千字节,-m)无限制

打开文件(-n)65536

管道大小(512字节,-p)8

POSIX消息队列(字节,-q)268435456

实时优先级(-r)0

堆栈大小(KB,-s)8192

cpu时间(秒,-t)无限制

最大用户进程(-u)65536

虚拟内存(千字节,-v)无限

文件锁(-x)无限

猫/ proc / sys / fs / file-max

65536

cat /etc/pam.d/login 还包含==>所需的 session /lib64/security/pam_limits.so

尝试了多种方法,包括链接https://docs.oracle.com/cd/E19623-01/820-6168/file-descriptor-requirements.html

请帮忙。

最佳答案

问题是您正在超越Tcl事件通知程序可以处理的限制,因为该限制基于Unix上的select()系统调用(在Unix上),该调用对支持的最大FD数进行了限制。特别是,它受到在编译时设置为(通常)1024个条目的堆栈上结构的大小的限制,并且Tcl保留了一些用于其他内容的文件描述符(例如,标准输入和输出)。这是对FD最大值的限制,而不仅仅是打开描述符的最大数量。超过最大值会导致缓冲区中的缓冲区溢出(以难以控制的方式),并使内存保护代码跳闸,从而产生您看到的错误。 (如果使用Tcl 8.5或8.6,则可能需要ulimit -n 1024将讨厌的崩溃转换为更好的崩溃。)

我们已通过切换到其他无限制的系统调用(上个月发布了8.7a3)来修复了8.7中的问题,尽管它是alpha版本,但对于这种情况来说应该足够稳定。但是,如果这样做不行,则必须在多个进程之间分配ssh session 的工作量。也许每个可以工作512个,或者如果仍然达到API限制的话,可以工作一半呢?由两个或四个管理器进程而不是一个管理器进程(您可以很容易地拥有一个主进程通过管道控制其他进程)对普通现代计算机的负载并不是很大的增加。甚至是十年或两年前的平均水平。

在某些情况下,可行的另一种方法是在这些ssh session 中运行屏幕,以便您可以与它们断开连接(而不会丢失正在发生的事情),从而减少同时使用的FD的数量。那不是一个通用的解决方案。

关于ssh - ***检测到缓冲区溢出***/usr/bin/expect终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59210092/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com