`
xitong
  • 浏览: 6188271 次
文章分类
社区版块
存档分类
最新评论

VMware Fusion中使用迅雷的问题

 
阅读更多
最近在下载几个3D片源,家里装了联通20Mbp的宽带,网速能达到2.5MB,异常迅猛,我在MacOS里面装了个虚拟机,虚拟机里面装了个Windows2003,Win2003里面安装了迅雷,专门下载3D片源。其实我也知道可以在Mac下直接装迅雷,之所以在虚拟机里安装,纯粹是一个偶然的因素,这是纯粹非技术因素,充其量算我的无知吧!
迅雷使用P2P方式下载,下载速度越快,网络崩溃的时间就越快,我发现只要速度持续2MB以上达到十分钟左右,NAT模式的虚拟机里面就无法联网了,在宿主机上看进程,发现vmnet-natd这个进程不在了,可是某一次,vmnet-natd程序在的情况下,网络也不可用了,这个问题该如何解决?
VMWare的nat模式其实是用户态的vmnet-natd来完成的,它本质上是一个代理,多于TCP而言是一个握手代理,对于虚拟机里面外出的每一个连接,vmnet-natd都要有一个TCP连接与之对应,而在Unix/Linux上(MacOS底层是一个Unix),每一个连接都是一个socket,而每一个socket都是一个打开的文件描述符,因此最多能有几个连接受制于Unix进程中最多能打开几个文件描述符,这和Linux的ip_conntrack数量限制是一样的。而对于P2P下载,无疑会有大量的连接,在宿主机上lsof一下vmnet-natd,发现文件描述符达到了几千个,某一次,正是由于文件描述符达到了上限所导致的网络崩溃。
还有那么一次,我发现vmnet-natd不在了,这肯定就无法上网了,于是重新运行它:
/Applications/VMware\ Fusion.app/Contents/Library/vmnet-natd -s 9 -m /Library/Preferences/VMware\ Fusion/vmnet8/nat.mac -c /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf -D
得到下面的输出:
Using configuration file: /Library/Preferences/VMware Fusion/vmnet8/nat.conf.
IP address: 172.16.49.2
Subnet: 255.255.255.0
External IP address: 0.0.0.0
Device: vmnet8.
MAC address: 00:50:56:E6:37:3C.
Ignoring host MAC address: 00:50:56:C0:00:08.

然而,当持续高速时,突然出现了下面的报错:
vmnet-natd(2651,0x7fff7b380960) malloc: *** error for object 0x101903ff8: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

这种错误是没法直接解决的,很明显这是程序的bug导致的,虽然解决不了,总是可以补救,那就是再次手工运行vmnet-natd即可,需要注意的是-s参数,可能不再是原来的。
还有那么一次,文件描述符没有达到上限,也没有上述的报错,可是虚拟机中的网络还是崩溃了。打开活动监视器,发现vmnet-natd进程的CPU占用达到了100%,进程取样看不出任何异样,很明显这也是vmnet-natd程序本身的问题。重新启动一下vmnet-natd即可。
太麻烦了,最直接的解决办法:1.直接在Mac上装迅雷;2.使用桥接模式(就像美国电影拍续集一样,在结束本文时,我突然看到了一个进程:vmnet-bridge,理论上,它是不需要的啊,Windows上不是直接在物理网卡上注册一下桥接协已就可以了吗??Linux上不是注册一个ptype_all就可以了吗??)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics