Php 从流浪客到OSX的NFS挂起

Php 从流浪客到OSX的NFS挂起,php,osx-mountain-lion,vagrant,Php,Osx Mountain Lion,Vagrant,我有一个流浪客,我用它在本地运行Symfony 2应用程序进行开发。一般来说,这工作正常,但是,我经常发现进程锁定在“D+”状态(等待I/O) 我尝试运行我的单元测试: ./bin/phpunit-c应用程序 任务将启动,但不会退出。在流程列表中,我看到: 流浪汉3279 0.5 4.9 378440 101132分/0 D+02:43 0:03 php./bin/phpunit-c应用程序 这项任务是无法完成的。我需要给流浪客通电才能把它弄回来。这似乎主要发生在PHP命令行应用程序中(但这也是

我有一个流浪客,我用它在本地运行Symfony 2应用程序进行开发。一般来说,这工作正常,但是,我经常发现进程锁定在“D+”状态(等待I/O)

我尝试运行我的单元测试:

./bin/phpunit-c应用程序

任务将启动,但不会退出。在流程列表中,我看到:

流浪汉3279 0.5 4.9 378440 101132分/0 D+02:43 0:03 php./bin/phpunit-c应用程序

这项任务是无法完成的。我需要给流浪客通电才能把它弄回来。这似乎主要发生在PHP命令行应用程序中(但这也是我执行的主要命令行任务,因此可能不相关)

系统日志报告挂起的任务:

Aug 20 03:04:40 precise64 kernel: [ 6240.210396] INFO: task php:3279 blocked for more than 120 seconds.
Aug 20 03:04:40 precise64 kernel: [ 6240.211920] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Aug 20 03:04:40 precise64 kernel: [ 6240.212843] php             D 0000000000000000     0  3279   3091 0x00000004
Aug 20 03:04:40 precise64 kernel: [ 6240.212846]  ffff88007aa13c98 0000000000000082 ffff88007aa13c38 ffffffff810830df
Aug 20 03:04:40 precise64 kernel: [ 6240.212849]  ffff88007aa13fd8 ffff88007aa13fd8 ffff88007aa13fd8 0000000000013780
Aug 20 03:04:40 precise64 kernel: [ 6240.212851]  ffff88007aa9c4d0 ffff880079e596f0 ffff88007aa13c78 ffff88007fc14040
Aug 20 03:04:40 precise64 kernel: [ 6240.212853] Call Trace:
Aug 20 03:04:40 precise64 kernel: [ 6240.212859]  [<ffffffff810830df>] ? queue_work+0x1f/0x30
Aug 20 03:04:40 precise64 kernel: [ 6240.212863]  [<ffffffff811170e0>] ? __lock_page+0x70/0x70
Aug 20 03:04:40 precise64 kernel: [ 6240.212866]  [<ffffffff8165a55f>] schedule+0x3f/0x60
Aug 20 03:04:40 precise64 kernel: [ 6240.212867]  [<ffffffff8165a60f>] io_schedule+0x8f/0xd0
Aug 20 03:04:40 precise64 kernel: [ 6240.212869]  [<ffffffff811170ee>] sleep_on_page+0xe/0x20
Aug 20 03:04:40 precise64 kernel: [ 6240.212871]  [<ffffffff8165ae2f>] __wait_on_bit+0x5f/0x90
Aug 20 03:04:40 precise64 kernel: [ 6240.212873]  [<ffffffff81117258>] wait_on_page_bit+0x78/0x80
Aug 20 03:04:40 precise64 kernel: [ 6240.212875]  [<ffffffff8108af00>] ? autoremove_wake_function+0x40/0x40
Aug 20 03:04:40 precise64 kernel: [ 6240.212877]  [<ffffffff8111736c>] filemap_fdatawait_range+0x10c/0x1a0
Aug 20 03:04:40 precise64 kernel: [ 6240.212882]  [<ffffffff81122a01>] ? do_writepages+0x21/0x40
Aug 20 03:04:40 precise64 kernel: [ 6240.212884]  [<ffffffff81118da8>] filemap_write_and_wait_range+0x68/0x80
Aug 20 03:04:40 precise64 kernel: [ 6240.212892]  [<ffffffffa01269fe>] nfs_file_fsync+0x5e/0x130 [nfs]
Aug 20 03:04:40 precise64 kernel: [ 6240.212896]  [<ffffffff811a632b>] vfs_fsync+0x2b/0x40
Aug 20 03:04:40 precise64 kernel: [ 6240.212900]  [<ffffffffa01272c3>] nfs_file_flush+0x53/0x80 [nfs]
Aug 20 03:04:40 precise64 kernel: [ 6240.212903]  [<ffffffff81175d6f>] filp_close+0x3f/0x90
Aug 20 03:04:40 precise64 kernel: [ 6240.212905]  [<ffffffff81175e72>] sys_close+0xb2/0x120
Aug 20 03:04:40 precise64 kernel: [ 6240.212907]  [<ffffffff81664a82>] system_call_fastpath+0x16/0x1b`
流浪客上nfsstat的输出

Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
0          0          0          0          0

Client rpc stats:
calls      retrans    authrefrsh
87751      0          87751

Client nfs v3:
null         getattr      setattr      lookup       access       readlink
0         0% 35018    39% 1110      1% 8756      9% 19086    21% 0         0%
read         write        create       mkdir        symlink      mknod
5100      5% 7059      8% 4603      5% 192       0% 0         0% 0         0%
remove       rmdir        rename       link         readdir      readdirplus
4962      5% 262       0% 313       0% 0         0% 0         0% 1056      1%
fsstat       fsinfo       pathconf     commit
1         0% 2         0% 1         0% 229       0%
我已经使用插件:vagrant vbguest确保来宾添加的内容是最新的

我不知道如何调试这个。我很清楚,这是来宾和MacOSX主机之间的NFS问题。如果我尝试使用NFS管理器在OSX上启动NFS的调试日志记录,我会在OSX中遇到内核死机

还有其他人有类似的问题吗?任何关于前进方向的建议都将不胜感激,因为每天给客人几次动力循环是行不通的

环境

  • OSX 10.8.4
  • 流浪汉1.2.7
  • Virtualbox 4.2.16
  • 流浪客操作系统:Ubuntu 12.04.2 LTS(GNU/Linux 3.2.0-23-generic x86_64)[precise64.box]

对于特定的答案,您没有提供足够详细的特定配置(例如导出文件、fstab文件、防火墙配置等)。以下是一些想法:

在fstab中,尝试将“hard,intr”标志添加到挂载选项中——这使得在死机挂载上终止等待I/O的进程成为可能

另外,请确保防火墙已为rpc调用打开,并且rpc statd服务正在运行

还要了解您正在运行的nfs版本以及您是否打开了正确的TCP/UDP端口。如果NFS v4不起作用,可以尝试NFS v3


最后,您是通过IP地址还是主机名连接?主机名很好,但请确保它总是正确解析——可能在/etc/hosts文件中。或者,对IP地址进行硬编码,以便名称解析不会失败…

在共享nfs文件夹中运行npm安装时,我遇到了类似的问题,随后发现禁用nfs_udp修复了挂起的问题:

 config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_udp: false

谢谢你的留言,史蒂夫。由于挂载是由Vagrant动态创建的,因此我不认为他们的挂载是在fstab中设置任何内容的选项(除了OSX之外,没有挂载-在本例中,来宾是NFS客户机)。我已经用/etc/exports文件内容更新了我的问题。我不认为这是一个防火墙或端口问题——因为iptables在ubuntuguest上有一个空的规则集,并且我没有在OSX上运行任何f/w(通常情况下,这个问题是间歇性的)。我也添加了nfsstat的输出,这表明它正在运行NFSV3。您能用strace运行php进程吗?也许这有助于了解发生了什么。也许你应该读一下问题的答案。这是针对cifs的,但NFS是最广为人知的案例(比smb/cifs更广为人知)。其他版本没有这样的问题。但是,我认为您不能在XNU上选择NFS服务器版本(4)。再次重申:这与我在CIFS问题上写的答案相同。在linux内核端实现了许多网络文件系统;如果无法在网络上访问服务器,则该进程将成为挂起的任务。@user2284570 With Vagrant-它都在同一台机器上。因此,NFS连接通过虚拟NIC连接到VirtualBox。我的假设是不太可能出现连接问题。正如所说的,虚拟机的目标是,如果它们是具有独立硬件的多个物理机,则会产生一个连接问题。所有网络信息都通过一个虚拟卡(位于服务器上),该虚拟卡与任何其他以太网卡一样发出虚拟以太网帧。在这种情况下,唯一的例外是通过添加虚拟盒为VM/server提供的。网络的唯一例外是aka虚拟盒共享文件夹。另外,您的回溯中有一些NFS函数,假设您的程序(D状态)正在等待网络I/O。请记住,网络故障可能是由软件故障引起的。修复了我的PHP脚本写入共享文件夹或尝试将最近写入的文件从/tmp移到/vagrant的问题
 config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_udp: false