Termuxのapache2+php+mariadbのチューニング前のwordpressの速度とか

さて、今回はメモ程度ですが スマホUMIDIGI F2に、termuxでapache2とphp7とmariadb10を入れた環境にWordPress代替えのClassicPressを入れて動作させてみました。いろいろ課題が見えて来たのでメモしておきます。まずは、どのくらいの速度で表示されるか、視覚的に見ると以下になります。約1.8秒です。

WebPageTest_-_Visual_Comparison_-_Aug_31__2020___jh_gpl_jp_

 

これは、後ほど出て来ますが https://www.webpagetest.org/ でのテスト結果です。ちょっと遅いですよね。まぁ、しかしスマホで動作していると思えば十分に速いかもしれません。

まだ設定は未調整ですがhttp接続(SSLじゃない80接続)でのベンチマークです。コマンドラインでのapache ab テストもやってみました。同時に100ユーザが、1ユーザーあたり10リクエストを発行した場合を想定しています。これは、一般的なhtmlアクセスに対するjsやcssや画像のアクセスかなと思います。まぁ、このブログはそんな人気じゃないので同時に10人くらいのアクセスで十分かもですがw

サーバ側の状態は、ClassicPressをデフォルトで入れた状態です。テーマは、ClassicPressのTwentySixteenです。画像は出ない状態で全部テキストです。htmlやcssやjsやfontなど全部で、278 KBです。

まず、ローカルのリモート(macos)から。

$ ab -n 1000 -c 100 http://192.168.1.38:8080/

Server Software:        Apache/2.4.46
Server Hostname:        192.168.1.38
Server Port:            8080

Document Path:          /
Document Length:        15825 bytes

Concurrency Level:      100
Time taken for tests:   78.390 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      16123000 bytes
HTML transferred:       15825000 bytes
Requests per second:    12.76 [#/sec] (mean)
Time per request:       7839.037 [ms] (mean)
Time per request:       78.390 [ms] (mean, across all concurrent requests)
Transfer rate:          200.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    4  15.5      1     410
Processing:   490 7663 5599.2   6405   30174
Waiting:      461 7317 5486.8   5962   30109
Total:        494 7667 5599.1   6407   30175

Percentage of the requests served within a certain time (ms)
  50%   6407
  66%   7733
  75%   9622
  80%  10952
  90%  16804
  95%  19520
  98%  24822
  99%  26571
 100%  30175 (longest request)

次は、GCPの東京リージョンからです。この経路は80←→8080にポート転送していますが、その差は感じない程度ですね。termux は、80ポートや443ポートでは運用できない制限がありますので、ルータで変換します。

$ ab -n 1000 -c 100 http://jh.gpl.jp/

Server Software: Apache/2.4.46
Server Hostname: jh.gpl.jp
Server Port: 80

Document Path: /
Document Length: 15742 bytes

Concurrency Level: 100
Time taken for tests: 78.813 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16040000 bytes
HTML transferred: 15742000 bytes
Requests per second: 12.69 [#/sec] (mean)
Time per request: 7881.291 [ms] (mean)
Time per request: 78.813 [ms] (mean, across all concurrent requests)
Transfer rate: 198.75 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 21 190 525.8 51 3058
Processing: 707 7470 4143.1 7264 22358
Waiting: 605 7100 4070.2 6790 22218
Total: 804 7661 4221.0 7341 22409

Percentage of the requests served within a certain time (ms)
50% 7341
66% 8008
75% 8490
80% 9059
90% 14244
95% 16246
98% 20310
99% 21250
100% 22409 (longest request)

次はtermuxが動作しているローカルからです。

$ ab -n 1000 -c 100 http://192.168.1.38:8080/

Server Software: Apache/2.4.46
Server Hostname: 192.168.1.38
Server Port: 8080

Document Path: /
Document Length: 15825 bytes

Concurrency Level: 100
Time taken for tests: 77.274 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16123000 bytes
HTML transferred: 15825000 bytes
Requests per second: 12.94 [#/sec] (mean)
Time per request: 7727.448 [ms] (mean)
Time per request: 77.274 [ms] (mean, across all concurrent requests)
Transfer rate: 203.76 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1428 791.4 1531 3535
Processing: 562 6046 2311.5 5785 16840
Waiting: 515 4357 2249.9 3816 16085
Total: 649 7474 2189.4 7356 17166

Percentage of the requests served within a certain time (ms)
50% 7356
66% 8082
75% 8376
80% 8620
90% 9861
95% 11707
98% 12754
99% 13209
100% 17166 (longest request)

ちなみに、ローカルのリモート(macos)からしか試していませんが、スマホの接続をWiFi接続を5Ghzではなく、2.4Ghzで接続した場合は以下でした。これ有線だとどうなるんでしょうかね。type-c と有線イーサネットは1つありますが、繋げても接続できなかったのでまだテストしていません。

Server Software: Apache/2.4.46
Server Hostname: 192.168.1.38
Server Port: 8080

Document Path: /
Document Length: 15825 bytes

Concurrency Level: 100
Time taken for tests: 84.280 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16123000 bytes
HTML transferred: 15825000 bytes
Requests per second: 11.87 [#/sec] (mean)
Time per request: 8427.984 [ms] (mean)
Time per request: 84.280 [ms] (mean, across all concurrent requests)
Transfer rate: 186.82 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 11 13.3 5 135
Processing: 491 7692 4699.6 7107 25513
Waiting: 443 7301 4611.2 6657 25511
Total: 493 7703 4700.0 7139 25514

Percentage of the requests served within a certain time (ms)
50% 7139
66% 8172
75% 9108
80% 10369
90% 14578
95% 18137
98% 20897
99% 22101
100% 25514 (longest request)

多少、劣るようですがそこまで気にしなくてもいいかもです。

それよりも、最初のhtmlのロードが長いです。以下は一番最初のビデオの状態を詳細にみた結果です。まだ圧縮転送やキャッシュは効かせていませんが、マシン性能が出る部分ですかね。ちょっと遅いです。NGINXだともう少し速くなるかもですので、また試してみたいと思います。

貼り付けた画像_2020_08_31_1_41

このWEBページのindex相当になるファイルはサイズ、15kb程度です。例えば、phpinfoのページを読んだ結果は以下です。このページは、82.0 KBありますが、0.4秒で終わっています。

WebPageTest_Test_Details_-_Tokyo___jh_gpl_jp_info_php_-_08_31_20_01_45_34

つまり、mariadbにアクセスしたりphpでのwordpressの処理時間がかかっているから遅くなっているということになりますね。

例えば、これは以前検討していたマシンでの結果ですが、htmlのロードは0.2秒以内に終わっています。UnixBenchが7000近く出るマシンでネットワークもIPv4→IPv6トンネルなので、比較するとあれですが、どこまで近づけるかですね。

WebPageTest_Test_Details_-_Tokyo___hoge_gpl_jp_-_03_16_20_02_24_59

まぁ、速度的なことより困っていることがあります。それは、ローカルのマシンから、termux上で動作しているwordpressにグローバルIPでアクセスできないことです。この場合、ルータの管理画面にアクセスしちゃうんで、どうしようかなと。こういうのなんていうんでしたっけか? とにかく、今の拠点のルータ(PR-400KI)は、内側ネットワークから外側のグローバルアドレスにアクセスしたものを、変換(最終的にサーバのプライベートアドレスに変換)してくれないのです。

プライベートアドレスだと、wordpressの設定で、グローバルのIPがマッピングされているドメイン名の設定になっているので(ルータで80と8080をポート転送してwordpressを運用)、リダイレクトされてアクセスできないんですよね。これはwordpress の仕様みたいなので回避不可能かなと。なんか言葉で書くとわかりにくいですね。今度、時間があるときに図解で問題点を明確にしたいです。

今の所、2案あります。1つは、マルチセッションを貼って違う光プロバイダーからアクセスさせる方法。もう一つは、リバースプロキシを経由させる方法です。

スマホで非ルートで動かすtermux は、IPテーブルとかルーティングとかいじれないので工夫が必要ですね。

ネットワークはあんまり得意じゃないんで、もっといい解決方法があるかもしれませんが。

Termuxのapache2+php+mariadbのチューニング前のwordpressの速度とか」への1件のフィードバック

  1. ピンバック: ポートフォワードの経路で、Uターン NATとかヘアピンNATが使えないルータの場合のあれこれ – アリエクでポチった JunkHack

お気軽にコメントどうぞ〜!