windows上使用dockerIO特别慢有没有更优的解决方案?
问题
部门目前使用docker来部署开发环境[lnmp],由于有一些旧的项目,会引入大量的库文件,因此在windows上经常一个接口请求需要十几秒,而在原生的linux机器上同样的环境几乎不需要1秒就可以响应.
后来查阅资料发现是因为IO的问题,读取文件速度太慢导致...黑人问号...
目前的一个临时解决方案是把项目代码放到虚拟机中,然后由samba把项目挂载到windows,但是这样有个问题就是在虚拟盘上使用svn特别慢
想问一下大佬们有没有其他更优的解决方案,不要太复杂搞什么文件同步
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
复制一个大佬的回答
Docker for Windows是在Hyper-V虚拟机上跑Linux,文件挂载是通过SMB协议从Windows挂载到Linux,文件读写都经过网络,遇到Laravel这种每次启动就要加载几百个文件的框架,文件性能问题就尤其明显。
最好的验证方法就是进到容器里,strace一下php-fpm进程,看下系统调用的耗时,你就会发现大部分时间都是在stat或read,所以解决的思路就是减少网络文件系统的读写。
方案0: 开opcache,减少read调用
方案1:不使用SMB协议挂载文件,通过union、rsync之类的工具同步文件修改。
方案2: 用WSL2
方案3:修改cifs内核模块,单独加大vendor目录的缓存时间,因为vendor目录下的文件很少变更,加大文件信息的缓存时间可以减少大量网络调用。加上方案0,响应时间从1秒减少到0.1秒。(现在我就在用这个方案,自己在Hyper-V跑Arch Linux + 修改过的cifs模块化 + docker)
Github有相关的讨论:Shared Volumes Slow ,基本都是方案0-2。
楼主啊!!都2019/10/10号了,您解决了吗???