web-dev-qa-db-ja.com

Windows 7 php + Symfony2はひどく遅い

これは私が長い間抱えてきた問題です。 WindowsコンピューターでPHP=アプリケーションを実行したいのですが、ロード時間が非常に長く、約10〜25秒です。私は多くのことを試しました:

  • 最初に簡単なXAMPPインストールを試しました
  • WAMPの方が速いかもしれないので、WAMPも試しました。同じ結果が得られました
  • 次に、PHPを使用してnginxサーバーをインストールしましたが、それでも解決しませんでした
  • 最後に、Ubuntu 11.10をVirtualBoxにインストールし、プロジェクトを含むWindowsファイルを共有しましたが、結果はさらに悪くなりました:毎回22秒以上の読み込み時間。

[〜#〜] update [〜#〜]:APCも試しました-少し改善されましたが、ページあたり6〜8秒です

私は自分のファイルをLinuxサーバー(共有ホスティング)にアップロードしました。このサーバーでは、約300〜500ミリ秒で実行されます。 XAMPPのインストールで、他の(Symfony2以外の)アプリケーション(phpmyadminなど)も実行しようとしましたが、これも共有ホスティングよりも低速でしたが、2-3秒の読み込み時間で極端に遅くはありませんでした。メインOSとしてLinuxに変更するまで、どのようにしてパフォーマンスを向上させることができますか?私はi7 CPU、4 GB RAM、5400RPM HDD、Win7 x64のラップトップを持っています。

ご協力ありがとうございました!

UPDATE2:不思議な理由で、symfonyのルーティングがfcgidで機能しなかったため(すべてに対して404エラーが表示されました)、=の使用に戻りましたPHPモジュールとして。今ではこれまでで最悪(モジュールとして使用するよりも悪い)になっています):アプリモード20〜25秒、開発モードでは毎回30秒以上、だから私はタイムアウトエラーを受け取り、それはAPCが有効になっていてもいなくても同じです。

ここ このエラーが表示されます。これは再現可能です。30秒以内に別の実行ポイントに到達するたびに:

enter image description here

35
David Frank

XPおよびServer 2003でしばらくsymfony 1に同様の問題がありました。解決策はPHPアクセラレータ(eAccelerator for us、APC may最近はより良い賭けをしてください)とFastCGI/fcgid。

補遺:私がWindowsでApacheを使用してからずっと昔です。私は一般的に、そのパフォーマンスは悪化しているのではなく、着実に向上していると考えています。しかし、ほとんどの珍しいセットアップと同様に、YMMV。以前のコメントのとおり、私は Apache Lounge で質問することをお勧めします。

メモリが正しく機能する場合、Apache Webサイトで提供されている標準のツールよりも優れたツールでコンパイルされた無料のApacheバイナリを提供できます。

8
halfer

更新:

PHP 5.5にPHP OPCacheが統合されたため、これにより実行時間が短縮されます。私のセットアップでは、データベースアクセスを伴う完全なリクエストに180msかかります。

手順:

  1. 最新のPHPバージョンに更新
  2. OPCacheを有効にする
  3. Xdebugを無効にする
  4. DemonTPxが言及するように、realpath_cache_size = 2Mを設定します

php.ini設定:

realpath_cache_size = 2M
[XDebug]
xdebug.profiler_enable = 0
xdebug.remote_enable = 0
[opcache]
zend_extension = "C:\xampp18\php\ext\php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000

WindowsがUnixより遅いのはなぜですか?

議論したように ここ 、PHPはfile_existsでは非常に遅く、Windowsではfilemtime()です。Symfony2はこれらの関数を開発モードで多く使用しているため、ここでは使用しません。 Windowsでは700ミリ秒未満(5.4以下)になります。PHP 5.5では180ミリ秒が許可されています。

解決策は WinCache であり、これはIISでこの問題を解決するためにMicrosoftによって開発されました。しかし、それはいくつかのWindowsバージョンでのみ機能し、IISでのみ機能するため、私にとっては解決策ではありません。

代替

また、VirtualboxにLinux仮想マシンを配置することもお勧めします。これは設定が簡単で、実稼働環境に似ています。

25
Simon Fakir

まったく同じ問題があります。 php.iniで次のように設定すると、パフォーマンスが800ミリ秒から300ミリ秒に向上しました。

php.ini:

realpath_cache_size = 2M

それでも、私がUNIXマシンから取得する100ミリ秒ではありませんが、少なくとも違いはあります。

20
Bert Hekman

うわー、さまざまなことを試した後、wampを使用するWindows7で、15秒の実行時間から3秒の実行時間に移動することに成功しました。

Wincache拡張機能のインストール方法: http://us2.php.net/manual/en/wincache.installation.php

Wincache dllをダウンロードする場所: http://sourceforge.net/projects/wincache/

私のphp.ini設定変更:

[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200

[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/ext/php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
3
Sébastien

数年前、私は同じ問題を抱えていました。バックグラウンドで実行しているウイルス対策ソフトウェアはどれですか。開発目的で非アクティブ化するか、変更してください。また、バックグラウンドで実行されているいくつかのインデックスサービスである可能性もあります。 Symfony 2は、ベンダーが15000を超えるファイルで構成されています:)また、Windowsを最初から再インストールして、クラシックな方法で実行してみてください。私のサイトは通常100〜500ミリ秒かかり、私のラップトップはあなたのものより遅いです。 (インテルC2D P8600)

1
Vincent

推測に過ぎませんが(おそらく正しいものではありません)、MySQLに関連している可能性があります。 PHPアプリケーションとして、PhpMyAdminとSymfony 2への言及を見ると、どちらもMySQLに依存しています(MySQLがSymfony 2で設定されている場合)。投稿でこれについて言及していませんが、 VirtualBoxのセットアップで、Ubuntuで実行されているスクリプトをWindowsホストマシンのMySQLサーバーに接続させたことがありますか?

PHPベンチマーク をチェックして、いくつかのパフォーマンステストスクリプトを確認し、これらのスクリプトのパフォーマンスが時間的に優れているかどうかを確認できます。

あなたが試すことができるもう1つのことは、 Xdebug を使用して、(a)時間がかかりすぎている特定の(グループの)関数を見つけるかどうかを確認することです。

私は間違いなく、この質問をお気に入りにしておくつもりです。なぜなら、私はそれが今何であったかを知りたくないので:)頑張ってください!

1
Wouter

キャッシュメカニズムに問題があると思います。 app\cacheディレクトリを確認してください。 devという名前のフォルダーが必要です。存在しない場合や空の場合は、フォルダの権限を確認してください。 app\cacheディレクトリの下のdevおよびprodディレクトリを削除すると、ページのロードに18秒かかりますが、その後500ミリ秒しかかかりません。

1
Ekrem

ページの実行に20秒かかりました。高速のcgiをインストールし、メモリ制限を増やし、すべてが機能しません。その後、タイムラインの調査を開始し、symfonyファイアウォールモジュールがほとんどの時間を占めていることに気付きました。 doctrineの場合、私の設定に「localhost」があることが判明しました。これが問題の原因でした。127.0.0.1に変更すると問題が解決しました。理由は不明ですが、ここで説明されています。

http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html

0
Alex

コンピュータのランダムアクセスメモリをチェックしますRAM using http://oca.Microsoft.com/en/windiag.asp を使用するか、Ubuntuに付属のメモリテストアプリケーションを実行しますCD起動オプション。

どちらの場合も、エクストラテストまたはディープテストと呼ばれるものを選択します-私は正確には覚えていません-しかし、より長い時間のテストを選択してください。この種のテストには終わりがありません。通常、RAMが表示されます。

また、チェックの任意の手段でハードドライブをチェックしてください。その後、ディスクの最適化を実行してみてください

あなたの問題はハードウェア関連の問題です。

0
user1350140