PHP中好用的SSH2是什么?

3
我有一个PHP脚本,使用pecl ssh2扩展(主要是ssh2_sftp_*)在服务器之间传输一堆文件。每次传输的文件大约总共有1GB左右。带宽被限制,所以这不是问题。问题是ssh2进程会消耗大量的CPU资源,并且在上传期间会实际减慢服务器的速度。有没有办法以特定的优先级启动ssh进程?如果php的ssh2函数创建了一个新进程(我不确定是否是这样),那么在php脚本内部启动后是否可能找到并renice此进程?由于ssh2函数不是线程化的,因此可能没有这种方法。

基本上,我想让PHP的ssh2函数不要使用太多CPU资源。似乎proc_nice可以做到这一点,但看起来我可能需要使用ionice。我该怎么做呢?


我不确定服务器的确切型号,但我知道它是Debian系统。 - Explosion Pills
我将进行尝试,看看是否能够重复这个过程。 - DaveRandom
如果您不确定服务器正在运行什么,请尝试作为普通用户执行“uname -a”,因为这将给您一个提示。如果是Debian,则“cat /etc/debian_version”将告诉您版本/发布信息。 - pwaring
好的,那么你可能正在运行Debian Lenny。无论你的ssh问题如何,你都需要在不久的将来升级到Squeeze,因为Lenny的安全更新将在二月份停止(此外,你将获得PHP 5.3.x,带来的所有改进)。 - pwaring
@pwaring 我与此无关,但据我所知,我们正在进行升级工作。 - Explosion Pills
显示剩余3条评论
1个回答

1

简单查看PEAR::ssh2的源代码,可以发现SSH2函数是在线程和进程中执行的,因此没有真正的直接方法。以下是两种可能性:

  • 如果您正在使用多进程Apache,请使用proc_nice来降低优先级,然后使用apache_child_terminate来终止进程。
  • 使用proc_open或类似工具打开一个shell脚本
#!/bin/bash
read SRCFILE
read DSTFILE
nice scp "$SRCFILE" "$DSTFILE"

我们把后者用于许多占用CPU的任务。


修复了您的代码格式。Markdown 存在一个问题(Bug?),即如果您尝试在无序列表后立即添加四个空格的代码部分,它会变得混乱。解决方法是使用显式的 HTML <ul> - DaveRandom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接