memcachedに奇妙な問題があります。私はhere、here、here、hereおよびfew other placesを検索しました。だから私はindex.php
とindex2.php
の2つのページがあります(ファイルの名前は気にしないでください)。Memcachedが応答に時間がかかりすぎる
index.php
次のコードが含まれています
<?php
$data = file_get_contents('test.txt');
echo "done";
そしてindex2.php
は、次のコードが含まれています
<?php
function file_get_contents_new($filename, $memcache){
$time = filemtime($filename);
$hash = md5($filename.$time);
$content = $memcache->get($hash);
if($content){
return $content;
}
$content = file_get_contents($filename);
$memcache->set($hash, $content, 10000);
return $content;
}
$memcache = new Memcached;
$memcache->addServer('localhost', 11211);
file_get_contents_new('test.txt', $memcache);
echo "done";
周り58967
文字がランダムなサイトからHTMLソースを持っているもう一つのファイルtest.txt
があります約57.6kb
です。今、私はindex2.php
をプロファイリングしようとすると、
:私はindex.php
をプロファイリングしようとしたとき
は今、私は(私はデータを表示するには、プロファイリングとphpstormためxdebugのを使用しています)、次のプロファイリング結果を得ました私は、次のスナップショットを取得:
我々は$memcache->get()
は、私は私のローカルマシン上のMemcachedを実行しているとして、あまり意味がありません。これは非常に長い時間がかかっていることをはっきりと見ることができます。
次に、多分それはちょっとしたエラーだと思って、Apacheのベンチマークツールab
を試してみました。
Server Software: Apache/2.4.20
Server Hostname: localhost
Server Port: 80
Document Path: /index.php
Document Length: 4 bytes
Concurrency Level: 100
Time taken for tests: 0.555 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 2030000 bytes
HTML transferred: 40000 bytes
Requests per second: 18025.33 [#/sec] (mean)
Time per request: 5.548 [ms] (mean)
Time per request: 0.055 [ms] (mean, across all concurrent requests)
Transfer rate: 3573.38 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 1 5 0.8 5 19
Waiting: 1 5 0.7 5 19
Total: 2 5 0.7 5 19
Percentage of the requests served within a certain time (ms)
50% 5
66% 6
75% 6
80% 6
90% 6
95% 7
98% 7
99% 8
100% 19 (longest request)
その後、私は非常に遅く、奇妙で、次の試験ab -n 10000 -c 100 http://localhost/index2.php
Server Software: Apache/2.4.20
Server Hostname: localhost
Server Port: 80
Document Path: /index2.php
Document Length: 4 bytes
Concurrency Level: 100
Time taken for tests: 9.044 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 2030000 bytes
HTML transferred: 40000 bytes
Requests per second: 1105.72 [#/sec] (mean)
Time per request: 90.439 [ms] (mean)
Time per request: 0.904 [ms] (mean, across all concurrent requests)
Transfer rate: 219.20 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 6 79 71.1 76 5090
Waiting: 6 79 71.1 76 5090
Total: 7 79 71.1 76 5090
Percentage of the requests served within a certain time (ms)
50% 76
66% 78
75% 79
80% 81
90% 85
95% 89
98% 93
99% 107
100% 5090 (longest request)
をした:私は実行され、正確なコマンドはかなり速かったとの結果があっab -n 10000 -c 100 http://localhost/index.php
ました。二次記憶装置からの読み取りよりもメモリからの読み取りが遅いのはなぜですか?それとも、彼らはfile_get_contents
私はかなり強いです働いているコンピューター上のいくつかのキャッシュを実装しましたし、設定は次の通りです:
- MANJARO OS(Linuxカーネル4.1.26-1)
- 16ギガバイト次メモリ
- 256ギガバイトSSDは
- インテルCore i7プロセッサー
編集:@ ShiraNai7がコメントしたように、私はトライサーバーのURLを127.0.0.1以下に変更すると、Apacheのベンチマークツールの結果となります。
Server Software: Apache/2.4.20
Server Hostname: localhost
Server Port: 80
Document Path: /index2.php
Document Length: 4 bytes
Concurrency Level: 100
Time taken for tests: 11.611 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 2030000 bytes
HTML transferred: 40000 bytes
Requests per second: 861.25 [#/sec] (mean)
Time per request: 116.111 [ms] (mean)
Time per request: 1.161 [ms] (mean, across all concurrent requests)
Transfer rate: 170.74 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 47.0 0 1009
Processing: 6 113 67.6 105 633
Waiting: 6 111 67.1 103 633
Total: 6 116 82.5 106 1197
Percentage of the requests served within a certain time (ms)
50% 106
66% 135
75% 153
80% 167
90% 204
95% 235
98% 286
99% 334
100% 1197 (longest request)
これは改善されていますが、多くはありません。そして、なぜそれが/etc/hosts
にあり、それが私のローカルマシンに座っているので、DNSルックアップがなぜそんなに長くかかるのか分かりません。
編集:APCが続行されているかどうかを確認しようとしましたが、見つからなかったので、Opcache
モジュールが見つかりました。それはなぜfile_get_contentsが高速ですか?
私はhosted私のphpinfoが私のマシンでどのように見えるかを見ることができるjsbinです。
する* 127.0.0.1 * DNSルックアップは、ここで犯人ではないことを確認するために*ローカルホスト*変更してみてください。 – ShiraNai7
こんにちは@ ShiraNai7、私は大幅に改善された127.0.0.1にローカルホストを変更しようとしましたが、コメントが文字の制限を持っているので、まだそれは遅すぎる、私は私の質問を編集し、ありがとう。 –
ちょうど私の2c、Redisのためのmemcachedの溝...より良いパフォーマンスと頭痛の少ない。 – Eric