首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python SSH Server( twisted.conch)在大量回显时占用高cpu使用率

Python SSH Server( twisted.conch)在大量回显时占用高cpu使用率
EN

Stack Overflow用户
提问于 2016-11-15 10:37:09
回答 1查看 328关注 0票数 2

我用Twisted Conch编写了一个SSH服务器。但是遇到了一个难题。假设用户A和用户B通过ssh命令登录到扭曲的ssh服务器。然后用户A尾部或猫的服务器上的一个大文件(大于100M),这将造成很多回声通过扭曲的ssh服务器,使得python ssh进程(twisted.conch )的cpu使用率非常高(大于95%,甚至100%),然后用户B将被阻塞,很长时间没有响应。当发现用户A通过扭曲的ssh服务器有大量回声并且不阻塞其他连接的用户时,有没有办法让userA的会话休眠(0.5秒)?

代码语言:javascript
复制
import sys  
import checkers  
from twisted.python import components, log, logfile  
from twisted.cred import portal  
from twisted.internet import reactor  
from twisted.conch.ssh import factory, keys, session, filetransfer  
from twisted.conch.unix import UnixSSHRealm, SSHSessionForUnixConchUser, UnixConchUser  
import keyvalue  
if __name__ == "__main__":  
   sshFactory = factory.SSHFactory()  
   sshFactory.portal = portal.Portal(UnixSSHRealm())  
   sshFactory.portal.registerChecker(checkers.UsernamePasswordChecker())  

   sshFactory.publicKeys = {
    'ssh-rsa': keys.Key.fromString(keyvalue.publicKey)}
   sshFactory.privateKeys = {
    'ssh-rsa': keys.Key.fromString(keyvalue.privateKey)}
   components.registerAdapter(
    SSHSessionForUnixConchUser, UnixConchUser, session.ISession)
   log.startLogging(sys.stdout)

   reactor.listenTCP(2222, sshFactory)
   reactor.run()
EN

回答 1

Stack Overflow用户

发布于 2016-11-16 16:41:41

这实际上是Twisted中的一个bug。一个使用服务器的用户不应该产生如此多的负载,以至于它对其他所有人都没有响应。

然而,这并不是一个容易解决的问题。有几种解决方案。

首先,在执行其他操作之前,您应该确保您的代码使用的是PyPy,这可能会为您提供支持更多用户所需的所有额外性能。即使这还不够,它与其他解决方案结合起来也应该是有帮助的。

其中之一是,您可以使用策略like this在多个进程中运行此代码,这将允许您在多个内核上抢先运行进程。当然,这不会让您在一个进程中并发执行太多操作。

另一种选择是,您可以使用可以在sshFactory上使用的twisted.protocols.htb来限制传入流量的速率,并确保它在竞争连接之间得到公平处理。

请分享你在这方面的任何进展,因为我相信其他Twisted用户也会感兴趣!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40601119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档