我使用的 VPS(运行 Debian)有 512mb RAM。我尝试使用 rsync 在服务器上本地复制一些文件,但它很快就失败了,并显示以下消息:
rsync: writefd_unbuffered failed to write 5 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (13505 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
它只有 113MB 的文件(10,000 个)。但它在处理所有这些文件之前就失败了。
我认为这是因为可用内存有限,但似乎应该足够了?有什么办法吗?我可以让 rsync 使用文件作为内存堆栈吗?
根据要求更新
rsync 命令
rsync -av /srv .
ulimit -a
nine@www:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
自由的
nine@www:~$ free
total used free shared buffers cached
Mem: 524288 231104 293184 0 0 0
-/+ buffers/cache: 231104 293184
Swap: 0 0 0
交换可能会有帮助。问题是我认为我的 VPS 不支持添加它。
尝试进行交换
nine@www:~$ sudo swapon /home/nine/swap.file
swapon: /home/nine/swap.file: swapon failed: Operation not allowed
为什么我认为这是记忆问题
我有个问题,为什么我认为这是内存问题。这是因为我的 VPS 控制面板告诉我的。有一个表格显示了机器的错误,如下所示:
resourcetype held maxheld limit failcnt
numiptent 24 24 800 0
numfile 1612 2324 4200 0
dcachesize 440391 547046 20480000 0
numothersock 104 139 6000 0
dgramrcvbuf 0 17224 262144000 0
othersockbuf 172272 442048 262144000 0
tcprcvbuf 114688 4962176 262144000 0
tcpsndbuf 122528 2177672 262144000 0
numsiginfo 0 3 256 0
numpty 1 3 32 0
numflock 6 13 4120 0
numtcpsock 7 34 6000 0
oomguarpages 14029 23497 131072 0
vmguarpages 0 0 131072 0
physpages 14029 23497 9223372036854776000 0
numproc 102 142 4000 0
shmpages 697 1993 512000 0
privvmpages 57818 131075 131072 51
lockedpages 0 0 8192 0
kmemsize 5566036 7796832 117760000 0
观察权限失败次数,我相信这会显示内存何时超过其上限。每当我运行 rsync 时,它都会进行计数。
答案1
当文件较多时,rsync 会占用更多内存。
要么将文件拆分到单独的文件夹中并 rsync 它们,要么将源位置的所有 10,000 个文件打包成 TAR,然后将 10000.tar rsync 到您的 vps,然后解压它。
我不知道最新版本(3.1)是否解决了这个问题,但这是早期版本的一个问题。