9回目-18.表示が遅い理由は? Nginx? さくらVPSの帯域制限?

さくらVPSCentOS 7 2週間無料のお試し期間 9回目

目次一覧

 状態:-  閲覧数:453  投稿日:2018-03-30  更新日:2019-04-24
nginx.conf / 計測してみた / Q.「さくらVPS試用期間」はデータ転送帯域が「2Mbps」に制限されます、と注意書きされていますが、これはページ表示速度に影響ありますか?

mainコンテキスト

eventsコンテキスト

httpコンテキスト

設定例

トラブル履歴

nginx.conf / 計測してみた / Q.「さくらVPS試用期間」はデータ転送帯域が「2Mbps」に制限されます、と注意書きされていますが、これはページ表示速度に影響ありますか?

 閲覧数:119 投稿日:2018-03-30 更新日:2019-04-24 

nginx.conf


$ sudo vi /etc/nginx/nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
   worker_connections  1024;
}


http {
   include       /etc/nginx/mime.types;
   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';

   access_log  /var/log/nginx/access.log  main;
   sendfile        on;
   #tcp_nopush     on;
   keepalive_timeout  65;

   #gzip  on;

   include /etc/nginx/conf.d/*.conf;
}


$ sudo systemctl restart php-fpm
$ sudo systemctl restart nginx.service

keepalive_timeout
・HTTPの持続的な接続時間
   #keepalive_timeout  65;
   keepalive_timeout  0;


tcp_nopush
・このオプションを使用すると、レスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができる
・デフォルトの設定値はoff
   #tcp_nopush     on;
   tcp_nopush     on;  

計測してみた


ページ自体はすぐ表示されるが
・読込完了まで時間がかかる
・Networkタブで確認すると、js読み込み終わるまでに時間がかかっている
・async付けたり外したりしているが、効果なし
・後、ページ読込完了するまでの時間が4秒だったり30秒以上かかったり一定しない理由も不明
・jsはCDNではなくサーバから読み込んでいる

30s→ 6.61s
・4sだったり、13.89sだったりマチマチ

asyncの代わりにdefer
・10秒前後

付与しない
・4秒、10秒、30秒。バラバラ

データ転送帯域を「2Mbps」に制限されている場合、ページ表示速度に影響はありますか?
nginxのfastcgi_buffersの設定値の意味を教えてください 
Module ngx_http_fastcgi_module

Q.「さくらVPS試用期間」はデータ転送帯域が「2Mbps」に制限されます、と注意書きされていますが、これはページ表示速度に影響ありますか?


「Nginx + php-fpm」でサイト作成しています。
・Webページ表示が遅い原因を探しているのですが、現在試用期間中のため、データ転送帯域が「2Mbps」に制限されています。
・「データ転送帯域制限」と「ページ表示速度」に何か関係(影響)はあるでしょうか?
・「データ転送帯域制限」とは、FTPでダウンロードしたりアップロードしたりする時の制限ですか?
・Web表示速度には関係ない??

A


2Mbpsの制限はサーバからの通信についての制限となりますため、
サーバから何かしらの情報をダウンロードして表示するような
仕組みの場合は、表示自体にも影響があると考えられます。

$ ps alx | grep php-\.*pool | grep -v grep | awk '{sum+=$8} END {print sum/NR/1000}'
14.592

$ ps alx | grep php-\.*pool
                                                                                                     
5   994 12274 12273  20   0 669636 15432 skb_re S    ?          0:08 php-fpm: pool www                                                                       
5   994 12275 12273  20   0 669636 14504 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12276 12273  20   0 669636 14476 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12277 12273  20   0 669636 15292 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12278 12273  20   0 669640 15116 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12295 12273  20   0 669636 14308 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12296 12273  20   0 669636 14364 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12297 12273  20   0 669640 14104 skb_re S    ?          0:08 php-fpm: pool www                                                                      
5   994 12707 12273  20   0 669636 14292 skb_re S    ?          0:06 php-fpm: pool www                                                                      
5   994 13020 12273  20   0 669508 13904 skb_re S    ?          0:04 php-fpm: pool www                                                                      
0  1000 15636 15498  20   0 112668   996 pipe_w S+   pts/3      0:00 grep --color=auto php-.*pool



nginxの設定
Wordpressをnginxに変えたらデフォルトでメモリ逼迫。php-fpmの調節が必要だった
ランサーズのNginx+PHP-FPM化
お名前.comのVPSで運用中のNginx + PHP-FPM + MySQLサイトをチューニング

mainコンテキスト

 閲覧数:133 投稿日:2018-03-30 更新日:2018-03-30 

mainコンテキストに記述できる設定は?


コアモジュールで提供されるディレクティブ
Core functionality
・デフォルト設定
user  nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


userディレクティブ


実行ユーザ
・nginxのworkerプロセスの実行権限のユーザを設定する
・下記例ではnginxユーザで動作する
user  nginx;


nginxが動作しているときのpsコマンド出力例
・nginx: worker processがnginxユーザで動作していることが確認できる

$ ps auxf | grep [n]ginx
root     15904  0.0  0.1 126368  1860 pts/2    S+   18:38   0:00  |                   \_ vi /etc/nginx/nginx.conf                                            
nginx    15734  0.0  1.6 669632 17116 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
nginx    15735  0.0  1.5 669508 15864 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
nginx    15736  0.0  1.4 669544 15052 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
nginx    15737  0.0  1.5 669544 15352 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
nginx    15738  0.0  1.5 669632 15556 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
nginx    15755  0.0  1.4 669540 15176 ?        S    18:33   0:00  \_ php-fpm: pool www                                                                      
root     15752  0.0  0.1  53316  1276 ?        Ss   18:33   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf                              
nginx    15753  0.0  0.3  56148  3528 ?        S    18:33   0:00  \_ nginx: worker process                                                                  
nginx    15754  0.0  0.3  56148  3524 ?        S    18:33   0:00  \_ nginx: worker process  


worker_processesディレクティブ


workerのプロセス数
・動作させるnginxのworkerプロセスの数を設定する
・通常はCPUのコア数以下に設定
・イベント駆動のアーキテクチャであるため、CPUのコア数より多い数のプロセスを動作させても意味がない
・デフォルトの設定値は1
・下記例ではworkerプロセスの数を1個にするように設定している
worker_processes  1;


error_logディレクティブ


エラーログ
・エラーログの出力先ファイル名とロギングのレベルを指定する
・このディレクティブはmain, http, server, locationのどのコンテキストでも設定できるため、必要に応じてエラーログの出力先を変えることができる
・なお、デフォルトの設定値は"logs/error.log error"であり、errorレベル以上のログをlogs/error.logに出力する
・下記例ではwarnレベル以上のログを/var/log/nginx/error.logに出力する
error_log  /var/log/nginx/error.log warn;


pidディレクティブ


PIDファイル
・masterプロセスのプロセスIDを保存するファイルを設定する
・下記例ではnginxのmasterプロセスのプロセスIDを「/var/run/nginx.pid」へ保存する
pid        /var/run/nginx.pid;


eventsコンテキスト

 閲覧数:102 投稿日:2018-03-30 更新日:2018-03-30 

eventsコンテキストに記述できる設定は?


eventモジュールで提供されるディレクティブ
・デフォルト設定
events {
worker_connections 1024;
}


worker_connectionsディレクティブ


最大コネクション数
・一つのworkerプロセスが同時に処理できる最大コネクション数を設定する
・デフォルトの設定値は1024
・下記例では一つのworkerあたり最大1024個のコネクションを処理する
worker_connections  1024;


httpコンテキスト

 閲覧数:129 投稿日:2018-03-30 更新日:2019-04-24 

httpコンテキストに記述できる設定は?


httpモジュールで提供されるディレクティブ
・デフォルト設定
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;
  sendfile        on;
  #tcp_nopush     on;
  keepalive_timeout  65;

  #gzip  on;

  include /etc/nginx/conf.d/*.conf;
}


MIMEタイプの設定 - types, default_type
include       /etc/nginx/mime.types;

・このincludeディレクティブでは次のような内容のファイルmime.typesを読み込んでいる
types {
   text/html                             html htm shtml;
   text/css                              css;
   text/xml                              xml;
   image/gif                             gif;
   image/jpeg                            jpeg jpg;
   application/x-javascript              js;
   application/atom+xml                  atom;
   application/rss+xml                   rss;
中略
}

・typesディレクティブはMIMEタイプと拡張子のマッピングを設定する
・nginxでは上記のような内容のtypesディレクティブの設定を行ったmime.typesというファイルを用意しており、上述のようにincludeディレクティブで読み込むようにする

default_type  application/octet-stream;

・default_typeディレクティブではレスポンスのデフォルトのMIMEタイプを設定する
・上述のmime.typesで拡張子からMIMEタイプを決定できなかったときに、ここで指定したMIMEタイプが適応される
・なお、デフォルトの設定値はtext/plain
・この例ではデフォルトのMIMEタイプをapplication/octet-streamに設定する

アクセスログの設定 - log_format, access_log
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

・log_formatディレクティブはアクセスログの書式を定義する
・後述するaccess_logディレクティブでここで定義した名前を指定することにより利用できる
・このディレクティブはhttpコンテキストのみで利用できる
・この例ではmainという名前で書式を定義している
・なお、次のような"combined"という名前の定義が予め組み込みで用意されている
log_format combined '$remote_addr - $remote_user [$time_local] '
                   '"$request" $status $body_bytes_sent '
   '"$http_referer" "$http_user_agent"';


access_log  /var/log/nginx/access.log  main;

・access_logディレクティブはアクセスログの出力先のパスとlog_formatで定義した書式の名前を設定する
・デフォルトの設定値は"log/access.log combined"
・書式を省略すると"combined"が適応される
・なお、設定値を"off"にすると、アクセスログを出力しないため、アクセスログの出力を抑制したい場合に利用する
・このディレクティブはhttp, server, location, if, limit_exceptのどのコンテキストでも利用できるため、必要に応じて異なるファイル名のファイルにログを出力することができる
・この例では/var/log/nginx/access.logというファイルにmainの書式でアクセスログを出力する
・なお、ログに関してはhttp_logモジュールの機能

sendfile, tcp_nopush
sendfile        on;

・sendfileディレクティブはコンテンツのファイルの読み込みとクライアントへのレスポンスの送信にsendfile() APIを使うかを設定する
・sendfile()を使うとカーネル空間内でファイルの読み込みと送信が完了するため、効率良くファイルの内容をクライアントに送信できる
・デフォルトの設定値はoff。
・なお、sendfile()はプラットフォームやファイルシステムによっては問題が起きることもあるので、そのときは無効にしてくれ
・この例ではsendfile()を利用する

tcp_nopush     on;

・tcp_nopushディレクティブはsendfileが有効なときに、FreeBSDの場合はTCP_NOPUSHソケットオプション、Linuxの場合はTCP_CORKソケットオプションを使うかを設定する
・このオプションを使うと、レスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができる
・デフォルトの設定値はoff
・この例ではtcp_nopushの機能を有効にする

keepaliveの設定 - keepalive_timeout
keepalive_timeout  65;

・keepalive_timeoutディレクティブはサーバ側でのキープアライブのタイムアウトの秒数を設定する
・デフォルトの設定値は75s
・この例ではキープアライブのタイムアウトを65秒に設定している

レスポンスの圧縮 - gzip
gzip  on;

・gzipディレクティブではレスポンスのコンテンツを圧縮するかを設定する
・デフォルトの設定値はoff
・この例では圧縮を行う

gzipディレクティブ
・http_gzipモジュールの機能

バーチャルサーバの読み込み
include /etc/nginx/conf.d/*.conf;

・この例では/etc/nginx/conf.dディレクトリにある拡張子がconfのファイルを読み込む
・conf.dディレクトリにはバーチャルサーバ毎の設定ファイルを置く

設定例

トラブル履歴

 閲覧数:106 投稿日:2018-03-30 更新日:2019-04-24 
Some lines were ellipsized, use l to show in full nginx
・ルート権限がなかった

php エラーメッセージ nginx


システムのモニタ間隔を10000msに設定
  注意:終了中...
  注意:終了、バイバイ!
systemd monitor interval set to 10000ms
NOTICE: Terminating ...
NOTICE: exiting, bye-bye!


複数JavaScriptファイルを、PHPで結合



#!/bin/sh
dirs=("/var/www/w3c.tokyo/a.w3c.tokyo/js" "/var/www/w3c.tokyo/b.w3c.tokyo/js")

for dest in "${dirs[@]}"
do
   cp -fa all.js $dest/all.js
done


#!/bin/bash
set -Cu
#set -vx # Uncomment for debugging

readonly DESTS=("/var/www/w3c.tokyo/a.w3c.tokyo/js" "/var/www/w3c.tokyo/b.w3c.tokyo/js")
readonly SOURCE="all.js"

# 存在チェックが必要なら
#{ echo "${DESTS[@]}" | tr " " "\n" | xargs -I@ sh -c 'test -d "$1" || { echo "$1 is not exists!" && exit 1; }' _ @; } || exit 1
echo "${DESTS[@]}" | tr " " "\n" | xargs -I@ cp --force --archive "$SOURCE" @

exit $?



ファイルを予め指定した複数ディレクトリへ上書きコピーしたい


以前は普通に表示されていたWebサイト表示が、最近とくに遅くなっているので、原因を知りたい



9回目-16.MySQLデータ移行。迷走履歴

9回目-19.表示速度最適化



週間人気ページランキング / 9-19 → 9-25
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 16
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 15
3 PHPのmb_send_mail関数でメール送信できない | メール処理システム 11
4 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 10
5 tar: これは tar アーカイブではないようです 8
5 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 8
5 さくらVPS0 8
6 manページ日本語表示 | CentOS 7 (CentOS) 7
6 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 7
7 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
7 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 6
7 PHPファイルでchmodエラー | PHP(プログラミング言語) 6
7 echo と cat の違い 6
8 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 5
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 5
8 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 5
8 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? | CentOS 7 2週間無料のお試し期間 Link(さくらVPS) 5
9 6回目-10.Nginxでバーチャルホスト設定確認 | CentOS 7 2週間無料のお試し期間 6回目(さくらVPS) 4
9 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する | cron(Linuxコマンド) 4
9 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/26 1:01 更新