ネット上のアクセスボリュームをUPさせ効率の良い集客をご提案します。

カテゴリー「テクニカル」の記事

Apache最大同時接続数の設定考察について

 / Linux Tips, テクニカル, トピックス


Apache Webサーバは、接続に関するプロセスの作り方を3種類のモジュールタイプで提供している。

それはprefork/worker/eventがその3種類に該当し、いずれかのモジュールタイプを選択して利用することになる。デフォルトはpreforkである。

preforkは単純に1セッションづつ扱うhttpdプロセスを決められた最大数(maxclients)まで状況に応じて生成してゆく方式である。

なぜ、このpreforkをデフォルトにしているかだが、様々なサーバ環境構築で万人が使って失敗しにくいというのが本音だろう。パフォーマンスが高いのは間違いなくworker,eventタイプである。

worker,eventはapache連携する他のサーバとの兼ね合いがあるためスレッドの生成パターンが相性良くないと落ちてしまう原因を作る
その意味では玄人なモジュールタイプである。fastcgiでPHPを使う場合(php-fpm)使う際はworker、eventを使うがこちらはapacheと相性が良いのは間違いない。http2に切り替えているサイトも多いのでmod_phpからfastcgiで使うパターンが最近ではかなり増えているようだ。


preforkモードでのApacheセッション設定

MacClients及びServerLimitの設定値 計算方法

昔から色々な説が飛び交っているけれど、私は概ね次のように考えて設計している。


MaxClients = サーバ合計メモリ * (80%〜70%) / httpdプロセスの最大メモリ使用量


httpdプロセス最大メモリ容量 = (親httpdメモリ容量 + 子httpdの平均物理メモリ使用量 ✕ MaxClients)ー httpd子共有プロセスメモリ使用量 + その他WEB連携サーバ(MySQLサーバ,FastCGIプロセス等)

  • ※httpdプロセスで使うメモリ容量はそのサーバマシンで他に何(プロセス)が動いているかでメモリ考慮割合は異なるがおおよそサーバ全体メモリが5GB以下なら最初の運用は70%以下の容量に抑えて計算するのが安全と思う。後はログや統計を見ながら少しづつアップさせできるだけSAWPが頻繁に起きない程度にしておくことをお勧めする。
    他のプロセスが極めて使用率が低いなら多少増やしてSWAP対応もありだが、SWAPも使い出すと止まらなくなるためリクエストに対するレスポンスWait時間が長くなり遅くなる。落ちる場合も当然ある。
  • ※子httpdの平均物理メモリ使用量、親httpdのメモリ使用量、その他のメモリ使用量はtopコマンドのRESをチェックし計算する。子httpdプロセス共有は(SHR)で計算する。
  • ※親プロセスから子プロセスをforkすると、子プロセスが親プロセスのメモリ空間をshareします。すなわちそのshare分(SHR)を引く必要があります。
  • ※パラメータで ServerLimit > MaxClients になるように設定する。
  • ※セッションの終了とセッションの開始はTCPのリサイクルに要する時間、ハンドシェークのステータス変化に遅延が生じるため「ServerLimit > MaxClients」のようにしないとセッションの要求と需要が噛み合って来ない。適正値は実験で求めるとよい。サイト毎のサーバやネットワーク、コンテンツの性格、ユーザの傾向にも依存するため余裕をもって値を設計するとよいだろう。

測定の際に使うtopコマンドの使い方

下記はapacheユーザだけ特定してtopコマンドでプロセスを表示する 方法です。当然httpdプロセスのみ表示されるためメモリの使用量が観測しやすくなります。

macOS(High Sierra ,Catalina)でXcodeのアップデートが失敗する場合の対処

 / テクニカル, トピックス


日本時間で昨日(2019年10月8日にmacOS10.15 (Catalina)がリリースされました。導入された人も多かったでしょう。 私もその一人。


仕事柄、Xcodeを使用することがたまにあるため早速アップデートが出るようになったのですが、アップデートのために AppStoreで入手のアップデートの処理を行うとダウンロードしきってインストール段階でコケてしまう! 4,5回やってみたが全然駄目で改善の兆し無しだったのでデベロッパーから直接ダウンロードして実施することにしました。


結論! AppStoreを経由せず直接ブラウザ経由でダウンロードしたら全く問題なく入れ替えができました。Xcode_11.1.xipファイルのダウンロードの後にクリックすると Xcodeが解凍されるので解凍されたXcodeアイコンをApplicationフォルダーへドラッグすれば入れ替えが完了します。


Xcodeを直接ダウンロードする。

デベロッパーから直接クリックしダウンロード

余談ですがアップデート前にXcode.appのファイル名をXcode10.appとかに変更してAppStoreからアップデートし、その後にXcode.appに戻すというやり方もあるようだ。また似たような問題が起きたら挑戦してみよう。

HTTP2対応 CaddyWEBサーバで仮想サーバ作る場合のやり方

 / Linux Tips, テクニカル, トピックス


caddy Webサーバで仮想サーバを作る場合は、/etc/caddy/配下にvhostsフォルダを作成し大元の設定ファイルをコピーしてドメインに該当する箇所とSSLの在り処、Pushする箇所のみ書き換えれば良い。
仮想サーバ設定はimportのある最下行だけ削除しましょう。仮想サーバ設定ファイルは名前は何でも良い。拡張子が.confであるならすべてそのフォルダーにあるファイルを読み込んでくれる。 仮想サーバは大元設定ファイル(Caddifile)の一番最下行にあるimport文で仮想ホストのインクルードを行う。ワイルドカードが使えるのでこの一行でvhostsに配置する仮想サーバ設定は終わりだ。 今回はWEBメールのRoundcubeとPhpMyadminを以下の設定を修正してやってみたがあっさり動いた。caddyは設定が簡単でいいね。

Caddy 高速WEB サーバ(http2 quic対応) on CentOS7

 / Linux Tips, Wordpress, テクニカル, トピックス, ノウハウ


http2対応の高速サーバを今回扱ってみる。このサーバはGo言語で開発されたWEBサーバです。導入にはコンパイルから行う場合はGo言語開発環境が必要ですが
バイナリーから入れるのであれば、特にGo言語開発環境は必要ありません。導入方法は幾つかやり方があります。一番簡なのはCentOS7の場合ならepelレポジトリー
から導入するのが簡単です。今回はこのサーバを理解するため少し手間がかかるバイナリーダウンロードから導入する方法を紹介します。
尚、今回は既存のサイトをcaddyで設置するやり方ですが、新規サイトであればSSL接続の鍵の取得などを無償のLet’s Encryptから自動取得してくれます。

バイナリーパッケージのダウンロード

バイナリーパッケージを配置し実行環境を作る。

caddy起動をsystemdに登録する

caddyサーバの15,16行目の実行ユーザとグループを指定します。
22行目を編集します。-quic追加とcaddyプロセスログファイルの出力先を変更します。

caddy設定ファイルを作成する

www.testserv.netでhttps接続のListenや設定情報は以下のように行います。
予め、selinuxはOFFにしておきましょう。caddyは比較的デバッグ情報が寡黙の傾向にあるのでくだらないことで悩まず最初は「setenforce 0」で無効。 きちんとWEBサーバとして動いたら、「setenforce 1」で影響がないか確認すると良いと思います。 尚、この設定でQualisのSSLテスト評価で「A+」取得できました。

php-fpmの設定

caddyを起動する

トラブルシューティング

うまくcaddyが起動できていない場合は、おおよそlogのディレクトリパーミッション、SSL鍵のディレクトリパーミッションが原因のケースが多い。 あるいはログファイルなら予め0サイズのログファイル名をtouchコマンドで作っておくことをお勧めする。 「journalctl -xe」を実行して調べてみると良い。また、firewalldやiptablesでportが開放されているかチェックし、開放されてなければ該当portをオープンにしましょう。

※まだまだ発展途上なところがありますが、個人的には大変気に入りました。設定がシンプルで少ない設定で動かせるところが良いと思います。当社でもApache2.4からこのサーバに切り替えて使っています。

CentOS6 Apache2.4へアップグレードかつHTTP2対応 SSL&phpも考慮

 / Linux Tips, テクニカル, トピックス, ノウハウ


CentOSはバージョン6,7ともレポジトリーISUを追加してhttp2対応が必要。CentOS7はApache2.4ではあるがマイナーバージョンがhttp2に対応していない。
尚更、CentOS6は対応できていない。Ubuntu/Debian系のLinuxなら比較的簡単に入れられるのでそこがCentOSの場合面倒なところ。

まず最初に現在使っているhttpd2.2.xのWEBサーバとphpを外す必要があるだろう。標準のものを使っている場合はremiの進んだバージョンのphpを使っている
場合もあるだろうが概ね下記のような感じで依存関係もチェックしながら外してゆく。その後にISUのレポジトリーを追加してhttp2対応のhttpd2.4を導入する。
このバージョンではmod_phpが古いhttpdでなければ動かないようなのでphpはfastCGIを使った方法に変更する。

現行環境の削除、レポジトリー追加とapache2.4(http2対応バージョン)+fastCGI導入

※httpd2対応のモジュールロード設定は/etc/httpd/conf.modules.d/00-base.confに追加されています。

プロセスをevent型に切り替える

httpd2対応にはhttpdプロセスのprefork型の動作では駄目です。event型に切り替える必要があります。

fastCGIの設定修正

mod_phpが使えないのでfastCGI経由でphpを動作させます。それにあたり基本設定の動作ユーザをapacheに切り替えます。

仮想サーバ設定にhttp2動作のためのデイレクティブ追加

サーバの起動

http2になっているかチェックする。

http2に対応していることがブラウザの検証ツールで確認できます。 またレスポンスヘッダーを見て確認する事もできます。

h2プロトコルの結果検証

TOPへ戻る