4

開発のために Symfony 2 アプリケーションをローカルで実行するために使用している Vagrant ゲストがあります。一般に、これは正常に機能していますが、プロセスが「D+」状態 (I/O を待機中) でロックされていることが定期的にわかります。

例えば。単体テストを実行しようとしています:

./bin/phpunit -c アプリ

タスクは起動しますが、終了しません。プロセスリストに次のように表示されます。

vagrant 3279 0.5 4.9 378440 101132 pts/0 D+ 02:43 0:03 php ./bin/phpunit -c アプリ

タスクは殺せません。Vagrant ゲストの電源を入れ直して、元に戻す必要があります。これは主に PHP コマンド ライン アプリで発生するようです (ただし、これは私が行う主要なコマンド ライン タスクでもあるため、関係ない可能性があります)。

syslog は、ハングしたタスクを報告します。

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`

ボックスをプロビジョニングするために、次を使用してローカル フォルダーを共有しています。

config.vm.synced_folder "/my/local/path.dev", "/var/www", :nfs => true

Vagrant は、OSX ホスト上に次の /etc/exports ファイルを作成します。

# VAGRANT-BEGIN: c7d0c56a-a126-46f5-a293-605bf554bc9a
"/Users/djdrey-local/Sites/oddswop.dev" 192.168.33.101 -mapall=501:20
# VAGRANT-END: c7d0c56a-a126-46f5-a293-605bf554bc9a

vagrant ゲストでの 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 を使用して、Guest Additions がゲストで最新であることを確認しました。

これをデバッグする方法がわかりません。これがゲストと Mac OSX ホスト間の NFS の問題であることは明らかです。NFS Manager を使用して OSX で NFS のデバッグ ログを取得しようとすると、OSX でカーネル パニックが発生します。

他の誰かに同様の問題がありましたか? ゲストの電源を 1 日に数回循環させることは不可能であるため、今後の方法に関する提案をいただければ幸いです。

環境

  • OS X 10.8.4
  • 放浪者 1.2.7
  • バーチャルボックス 4.2.16
  • Vagrant ゲスト O/S: Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-23-generic x86_64) [precise64.box]
4

2 に答える 2

1

共有nfsフォルダー内でnpm installを実行したときに同様の問題が発生し、その後nfs_udpを無効にするとハングの問題が修正されることがわかりました。

 config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_udp: false
于 2014-03-11T10:21:43.790 に答える
0

特定の回答について、特定の構成 (exports ファイル、fstab ファイル、ファイアウォール構成など) について十分な詳細を提供していません。ただし、いくつかのアイデアがあります。

fstab で、マウント オプションに「hard,intr」フラグを追加してみてください。これにより、デッド マウントで I/O を待機しているプロセスを強制終了できます。

また、ファイアウォールが rpc 呼び出しに対して開いていること、および rpc-statd サービスが実行されていることを確認してください。

また、実行している nfs のバージョンと、正しい TCP/UDP ポートが開いていることも確認してください。NFS v4 が機能しない場合は、NFS v3 を試してみてください。

最後に、IP アドレスまたはホスト名で接続していますか? ホスト名は素晴らしいですが、常に正しく解決されることを確認してください - おそらく /etc/hosts ファイルで。または、IP アドレスをハードコーディングして、名前解決が失敗する可能性がないようにします...

于 2013-08-20T03:44:09.223 に答える