pscp.exe从Windows主机向Linux VM传输大文件时速度骤降问题排查
VM磁盘IO瓶颈:就算给VM分配了足够资源,虚拟磁盘的存储格式或宿主机磁盘状态也可能拖后腿。比如用了动态扩展虚拟磁盘,传输中磁盘自动扩容会变慢;或者宿主机磁盘IO队列堵了,VM的写请求被卡。在Linux VM里跑
iostat -x 1,看磁盘使用率、await这些指标,就能确认是不是磁盘拖了后腿。PSCP默认配置不匹配大文件传输:PSCP基于SSH,默认的TCP窗口大小、缓冲区设置可能太小,传输大文件时会频繁等确认包,越传越慢。可以试试在pscp命令里加
-w调窗口大小,比如pscp -w 65536 本地文件路径 用户名@VM地址:/远程路径;也能改Linux端/etc/ssh/sshd_config里的TCPWindowSize、ClientAliveInterval,改完重启sshd服务再试。网络设备动态限流:宿主机或VM所在的路由器、防火墙可能开了流量整形,检测到大流量持续传输就自动降带宽。传输时用
ping -t VM地址盯着延迟,或者在Linux VM里用iftop看实时带宽变化,就能判断是不是被限流了。VM内存缓存耗尽:Linux接收文件时先存内存缓存,缓存满了才刷到磁盘,这时候速度会从内存写入的高速掉到磁盘IO的速度,看起来就是持续下降。用
free -h看buff/cache的变化,或者vmstat 1监控交换内存使用(si/so指标),要是出现大量交换,说明内存被其他进程占了,实际不够用。PSCP进程自身资源异常:Windows端的pscp进程传大文件久了,可能出现内存泄漏或资源占用过高,导致效率下降。在任务管理器里盯着pscp的CPU、内存占用,要是持续飙升,就重启pscp试试,或者换用scp(比如Windows装Git Bash)、rsync配合SSH传输,看会不会有同样问题。
内容的提问来源于stack exchange,提问作者Philipp

