web-dev-qa-db-ja.com

PHP Windowsでのファイルアクセスが非常に遅い

私は最近、Windows10でセットアップした開発サーバーが非常に遅いことに気づきました。
xdebugを使用してデバッグ/プロファイリング(Prestashop 1.6)を実行しましたが、culprintはfile_existsでした。スクリプトのロード時間は、file_existが約40秒かかった時間から約43秒でした。

Windows 10マシンと古いCentos7ラップトップでパフォーマンスがどのようになるかを確認するために、小さなテストを作成しました。スクリプトは次のとおりです。

<?php
$microtime = microtime(true);
function displayCounter($txt){
    global $microtime;
echo "<p> {$txt}: ". round((microtime(true) - $microtime) * 1000,0) ."ms</p>";

    $microtime = microtime(true);
}

$file_prefix = __DIR__ . '/file';

for($i= 1; $i < 1000; $i++){
    file_put_contents($file_prefix . $i, '');
}
displayCounter('File Creation');

for($i= 1; $i < 1000; $i++){
    file_exists($file_prefix . $i);
}
displayCounter('file_exists');

clearstatcache();

for($i= 1; $i < 1000; $i++){
    file_exists($file_prefix . $i);
}
displayCounter('file_exists (after cache clear)');


for($i= 1; $i < 1000; $i++){
    unlink($file_prefix . $i);
}
displayCounter('unlink');

Windowsサーバーは[〜#〜] ssd [〜#〜]ドライブに基づいており、結果は次のとおりです。

File Creation: 1992ms
file_exists: 1055ms
file_exists (after cache clear): 963ms
unlink: 696ms

そしてLinux(ラップトップ5400rpm HDDドライブ)

File Creation: 226ms
file_exists: 5ms
file_exists (after cache clear): 4ms
unlink: 50ms

ここで何かがおかしいと思いますが、まだ何がわからないので、助けを求めてここに来ました。
ここでの問題を解決できません。私が探すべき「サービス」はありますか? Defenderのように(私の場合は無効になっています)

編集

同じスクリプトでさらにテストを行いました。何度か繰り返して確認したところ、結果は以下のとおりです。スクリプトを呼び出すディレクトリが重要です。それでもそれを壊すものを見つけることができません(私がそれがWindowsであることを知っていることを除いて...)

作業が行われている場所に現在のcmdパスが設定されている場合、すべてのテスト(M.2ドライブを除く)は正常です。

C: M.2
H: SSD
D: SSDHD
F: / E: HDD

(GPT) Current Folder C:\ (M.2)
D:\test_file_exists\test.php (SSDHD)
File Creation: 2541ms
file_exists: 1188ms
file_exists (cached in theory): 986ms
file_exists (after cache clear): 879ms
unlink: 1361ms

(GPT) Current Folder C:\ (M.2)
E:\test_file_exists\test.php (HDD)
File Creation: 2617ms
file_exists: 1031ms
file_exists (cached in theory): 893ms
file_exists (after cache clear): 841ms
unlink: 1156ms

(MBR) Current Folder C:\ (M.2)
C:\test_file_exists\test.php (M.2)
File Creation: 2485ms
file_exists: 2283ms
file_exists (cached in theory): 2045ms
file_exists (after cache clear): 2053ms
unlink: 1191ms

(MBR) Current Folder C:\ (M.2)
F:\test_file_exists\test.php (HDD)
File Creation: 2274ms
file_exists: 1080ms
file_exists (cached in theory): 922ms
file_exists (after cache clear): 838ms
unlink: 1105ms

(MBR) Current Folder C:\ (M.2)
H:\test_file_exists\test.php (SSD)
File Creation: 2243ms
file_exists: 1024ms
file_exists (cached in theory): 860ms
file_exists (after cache clear): 903ms
unlink: 1134ms

=============== TESTS STARTED IN ROOT OF VOLUME

(GPT) Current Folder D:\ (SSDHD)
D:\test_file_exists\test.php (SSDHD)
File Creation: 2277ms
file_exists: 1056ms
file_exists (cached in theory): 904ms
file_exists (after cache clear): 897ms
unlink: 1135ms

(GPT) Current Folder E:\ (HDD)
E:\test_file_exists\test.php (HDD)
File Creation: 2436ms
file_exists: 1116ms
file_exists (cached in theory): 844ms
file_exists (after cache clear): 849ms
unlink: 1145ms

(MBR) Current Folder C:\ (M.2)
C:\test_file_exists\test.php (M.2)
File Creation: 2311ms
file_exists: 2115ms
file_exists (cached in theory): 1986ms
file_exists (after cache clear): 1969ms
unlink: 1168ms

(MBR) Current Folder F:\ (HDD)
F:\test_file_exists\test.php (HDD)
File Creation: 2365ms
file_exists: 1031ms
file_exists (cached in theory): 961ms
file_exists (after cache clear): 849ms
unlink: 1112ms

(MBR) Current Folder H:\ (SSD)
H:\test_file_exists\test.php (SSD)
File Creation: 2251ms
file_exists: 1066ms
file_exists (cached in theory): 873ms
file_exists (after cache clear): 835ms
unlink: 1137ms
=============== TESTS STARTED IN FOLDER OF SCRIPT

(GPT) Current Folder D:\test_file_exists (SSDHD)
D:\test_file_exists\test.php (SSDHD)
File Creation: 1279ms
file_exists: 61ms
file_exists (cached in theory): 60ms
file_exists (after cache clear): 51ms
unlink: 1873ms

(GPT) Current Folder E:\test_file_exists (HDD)
E:\test_file_exists\test.php (HDD)
File Creation: 1395ms
file_exists: 68ms
file_exists (cached in theory): 59ms
file_exists (after cache clear): 48ms
unlink: 1183ms

(MBR) Current Folder C:\test_file_exists (M.2)
C:\test_file_exists\test.php (M.2)
File Creation: 1410ms
file_exists: 1261ms
file_exists (cached in theory): 1293ms
file_exists (after cache clear): 1298ms
unlink: 1129ms

(MBR) Current Folder F:\test_file_exists (HDD)
F:\test_file_exists\test.php (HDD)
File Creation: 1285ms
file_exists: 58ms
file_exists (cached in theory): 61ms
file_exists (after cache clear): 57ms
unlink: 1639ms

(MBR) Current Folder H:\test_file_exists (SSD)
H:\test_file_exists\test.php (SSD)
File Creation: 1365ms
file_exists: 72ms
file_exists (cached in theory): 55ms
file_exists (after cache clear): 62ms
unlink: 1092ms
5
Gacek

私の提案によると、彼がセーフモードで起動した後、ポスターは彼の問題が消えたことを報告しています。

セーフモードで実行すると、Windowsが問題を解決できる場合があります。また、数回再起動すると問題が解決する場合もあります。多分それはここで助けになった両方の組み合わせでした。

偶然、私の提案の副作用によって問題が修正されたとしたら、それは陽気です。

これは、セーフモードでの起動時に無効になる厄介な製品を検出することを目的とした、以下の元の回答で概説した手順の有効性を損なうものではありません。


元の回答

ネットワークを使用したセーフモード で起動すると、すべてが正しく機能します。このモードでは、Windowsはコアドライバーとネットワークサポートのみで起動し、特に起動時にサードパーティのアプリケーションやドライバーを起動することはありません。

したがって、速度低下は、コンピュータにインストールされている製品が原因である可能性があります。したがって、それを見つけて無効にする必要があります。

減速がPHPのみに限定されているかどうかはわかりません。私の答えの残りの部分では、一般的なWindowsの場合を扱います。ただし、問題がPHPのみに限定されている場合は、PHP自体へのアドオンが原因である可能性があります。

インストールされている製品の問題を見つけるのに役立つ最良の製品は autoruns で、これを使用すると、ワンクリックでスタートアップ製品をオフまたはオンに戻すことができます。

自動実行の使用については、次の記事を参照してください。
自動実行を使用して起動プロセスとマルウェアを処理する

自動実行では、すべてのスタートアップ製品が[すべて]タブに表示されます。ベルを鳴らす可能性のあるものについては、リストを調べることをお勧めします。何も思い浮かばない場合は、製品のブロックをオフにして毎回再起動し、製品が見つかるまで無効な製品の数を減らすことで、ブルートフォースを使用できます。

製品を見つけたら、それを完全にアンインストールするか、新しいバージョンを探すか、開発者に連絡するかを選択します。私たちも助けを求めています。

1
harrymc