PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【CentOS7】Apache2.4のconfファイルの設定について

f:id:zen6a:20161127224322p:plain
http://blog.wnotes.net/blog/article/apache-event-mpm

ソースコンパイルからインストールだと、eventになるってことなのかな??

CentOS7でyumでインストールしたものは、preforkだったんだけど。。。

インストールするOSによって設定が違うのかも。。。

Apache2.4からhttpd.confにpreforkの記述がないのと、CentOS7でのyumインストールでは、preforkの設定ファイルがありません。

なので、

「/etc/httpd/conf.d/」の中に「mpm.conf」っていうファイルを新規作成して設定しました。
※ファイル名は「.conf」がついていればなんでもいいと思います。

<IfModule mpm_prefork_module>
  StartServers               5
  MinSpareServers            5
  MaxSpareServers           10
  ServerLimit              256
  MaxRequestWorkers        256
  MaxConnectionsPerChild   1000
</IfModule>

※プロセスが多くなればメモリの使用量も増えるためシステムの負荷を見て調整してください。

設定が反映されているかどうかは、プロセスの起動数を見て確認しました。
下記のサイト様に記載されているコマンドでapache(httpd)のプロセスの数がわかります。

現在のプロセス数を調べる – katz+

ps aux | grep httpd | grep -v "\(root\|grep\)" | wc -l

apacheの設定ファイルを編集した後、反映させるには「reload」ではダメだったので、

service httpd stop

service httpd start

にて設定が反映されていることを確認できました。

下記のサイト様の「ServerLimit」の備考で気付きました。(汗

heartbeats.jp

「reload」で「ServerLimit」を256以上にしても反映されなかったので、助かりました。

ServerLimit 256の限界

Apacheのプロセス数が256以上溜まっている状態が続くと、サイト閲覧するタイミングによっては、画面が真っ白まま何も表示されなくなるので、メモリに余裕があればServerLimitを増やすか、ロードバランサーを使い、サーバを分散したほうがいいと思います。

※サーバのスペックによりますが、メモリが少ないサーバは、WEBとDBを切り分けたほうが良さそうです。もちろん、サーバ内に入っているサイトやシステムによります。サーバの増設の前にプログラムで解決できないか増設前にチェックしましょう~。


Apache2.4でのアクセス制限の記事を書きました。
zen6a.hateblo.jp

MySQLが重いときに使うコマンド

SHOW FULL PROCESSLIST

クエリーが改善されないときや重いと思ったときに、上記のコマンドを使うことで
実行中のスレッドを見ることができます。

「Info」にクエリーが表示されるため、その隣に表示される「Time」を見ながら
重いクエリーを判定できると思います。
※FULLをつけないとInfoの方には100文字までしか表示されません。

SHOW GLOBAL VARIABLES

MySQLサーバの設定値を確認できます。

MySQLではないですが、MySQLを使っているページに、アクセスが集中するとプロセスが溜まり重くなります。
プロセス数の確認は下記のコマンドになります。

ps aux | grep httpd | grep -v "\(root\|grep\)" | wc -l

プロセス数がたまっているときに、INSERTすると、エラーになりやすいため、INSERTできなかったときの処理(時間を置いて後でINSERTするなど)が必要になると思います。

【PHP】Carbonで日付の加算減算方法

前回、strtotimeの日付加算減算方法を紹介しましたが、、、

zen6a.hateblo.jp

Carbonのほうが、バグを気にせず使えるため、こちらも紹介したいと思います。

そのまえに、Composerが必要になります。前回の記事にて紹介しましたので、よければ参考にしてください。

zen6a.hateblo.jp

では、サンプルを公開〜。

<?php
  // carbonをダウンロードしたパス(前回の記事を参考)
  require '/home/○○○/bin/vendor/autoload.php';

  use Carbon\Carbon;

  // 今日
  echo Carbon::now();
	
  // 昨日
  echo Carbon::yesterday();
	
  // 明日
  echo Carbon::tomorrow();

  // 現時刻のタイムスタンプ
  echo Carbon::now()->timestamp;
		
  // 一週間前
  echo Carbon::now()->subWeek(1);
	
  // 一週間後
  echo Carbon::now()->addWeek(1);
	
  // 一ヶ月前
  echo Carbon::now()->subMonth(1);
	
  // 一ヶ月後
  echo Carbon::now()->addMonth(1);
	
  // 一年前
  echo Carbon::now()->subYear(1);
	
  // 一年後
  echo Carbon::now()->addYear(1);

  //月初
  echo Carbon::now()->startOfMonth();

  // 月末
  echo Carbon::now()->endOfMonth();
	
  // 一ヶ月前の月末
  echo Carbon::parse('-1 month')->endOfMonth();
	
  // 一ヶ月後の月末
  echo Carbon::parse('+1 month')->endOfMonth();
?>

日付のみ表示したい場合

<?php 
  $carbon = Carbon::now();
  echo $carbon->toDateString();
?>

日付の書式を変更したい場合

<?php 
  $carbon = Carbon::now();
  echo $carbon->format('Y年m月d日');
?>

生年月日から年齢判定

<?php 
$birthday = Carbon::parse('1990-05-15');
echo $birthday->age;
?>

日付の差分

<?php 
$date1 = Carbon::createMidnightDate(2018, 1, 1);
$date2 = Carbon::createMidnightDate(2018, 12, 31);

//秒
echo $date1->diffInSeconds($date2);
//分
echo $date1->diffInMinutes($date2);
//時間
echo $date1->diffInHours($date2);
//日
echo $date1->diffInDays($date2);
//週
echo $date1->diffInWeeks($date2);
//月
echo $date1->diffInMonths($date2);
//年
echo $date1->diffInYears($date2);
?>

エックスサーバーにComposerをインストールする方法

いつもはさくらVPSを使っているのですが、今回新しくエックスサーバーを契約してみました。

Carbon(カーボン)という日付処理が簡単にできるライブラリを使用するには、Composer(コンポーザー)が必要になりましたので、インストール手順を掲載したいと思います。

最初に、エックスサーバーのサーバーパネルにログインして、SSHで操作できるように設定をONにします。

次に、公開鍵認証用鍵ペアの生成ページから、パスフレーズ(お好きなパスワード)を入力して、「公開鍵認証用の鍵ペア生成」ボタンを押します。
※「.key」という拡張子のファイルがダウンロードがされます。

SSHの使い方(Tera Term)

SSHにログインするためには、「Tera Term」というソフトウェアを使います。
macの場合、付属のターミナルソフトでもログイン可能です。
osdn.jp

そのまま「Tera Term」を開いてもいいですが、SSHを自動ログインすることができるマクロを組み込めるため、下記のサイト様を参考にマクロを作成します。

www.j-oosk.com

作成後は、TeraTermをダウンロード時に一緒に付属している、「ttpmacro」から、マクロファイル「.ttl」を開き、ログインできれば完了です。

mac付属のターミナル接続方法

これも調べたら、下記のサイト様から設定手順が記載されてましたので紹介します。

ssh 接続を簡単にする ~/.ssh/config | dogmap.jp

私の場合、「.ssh」のフォルダがなかったため、「mkdir」コマンドでフォルダを作成してから、ssh_configファイルを作成しました。

SSHにログイン後、下記のコマンドを実行します。
※「composer」をインストールする前に、インストール先のフォルダを作ってから、上記のコマンドを実行したほうが、管理しやすいと思います。

// ディレクトリの作成
mkdir carbon

//「/carbon」ディレクトリに移動
cd carbon

// composerのダウンロード
curl -sS https://getcomposer.org/installer | /usr/bin/php5.6

※「/usr/bin/php5.6」はPHPのバージョンによって異なるため、XSERVERのサーバ情報のコマンドパス一覧から確認。

下記のメッセージが表示されていれば、完了です。

「Composer successfully installed to: /home/XXX/composer.phar」

インストールしても何も動かないので追記w

Carbonのインストールまでこの記事に書いていきたいと思います。

まずは、composerをダウンロードしたディレクトリに移動します。

// ディレクトリ移動
cd carbon

Linuxコマンドと同様に、composerと入力するだけで動くように設定します。

// ディレクトリの作成
mkdir ~/bin

// composer.pharの移動と名前変更
mv composer.phar ~/bin/composer

// 動作テスト
composer

下記の文字が表示されれば、正常に動作しています。
f:id:zen6a:20160302222245p:plain

最後に下記のコマンドで、carbonをダウンロードします。
※そのままコマンドを実行すると、現在のディレクトリにダウンロードされてしまうため、コマンド実行前にcdで移動します。

cd /bin

composer require nesbot/carbon

「vendor」というフォルダがあれば、ダウンロード成功です。

※carbonの使い方を公開しました。

zen6a.hateblo.jp

Windows Serverのライセンスの仕組みを理解してみる

システムの動作関係上、WindowsServerがないと動かないと、愚痴を言われて仕方なく調べていたのですが、Linuxには存在しない、CALというライセンスがあり、知らないとトラブルになる可能性があったので調べてみました。

Windows Server OSの種類

現段階(2016年2月)での最新は、Windows Server 2012 R2になります。

4つのエディションがありますが、中小企業でよく使われるのは、下記のエディションになると思います。

  1. Standard
  2. Essentials

StandardとEssentialsどちらかを選ぶポイント

無難にStandardを選んでおけば、全ての機能が使えるため一見問題ないように見えますが、WindowsServerにアクセスするために必要なCALが絡んできます。
※厳密には、WindowsServerに入っているサービスにアクセスするために必要。

Essentialsは、CALが不要で最大25ユーザまで、アクセスすることが可能なため、小規模なものであればこちらで問題なさそうです。
※25ユーザを超えると、アクセスできなくなるため注意。

Standardは、金額が10万円と高価なOSですので、今後の拡張性も考慮した上で選ぶべきです。

サーバ運用でCALが不要なものとは

Windows Serverを使い、Webサイトを全体公開するものであればCALの購入は必要ないとのことです。
ただし、一部のユーザだけが閲覧できるものがある場合、エクスターナルCALが必要になるそうです。

「ECL(エクスターナル コネクタ ライセンス)」外部ユーザーのアクセス向けCAL – PGDブログ

SQLServerExpressを使う場合にもCALが必要なのか?

SQL Server Expressを使用した場合、SQL Server CALは必要か不要か?
http://salaryman-life.blogspot.jp/2013/03/sql-server-expresssql-server-cal.html

上記のサイト様より、直接質問した履歴を見てみると、SQLServerExpressであれば、CALは不要だが、WindowsServerのCALは必要とのことです。

結局どっち選べばいいのか

Standardを選んでおけば、契約したCALの数が一時的に超えていても使用できるそうです。ただし、ライセンス違反になるため、必要に応じて追加のCALを購入、管理する人が必要になりそうですね。。。

値段だけ見ると、OSの導入でもかなり高価なのに、ライセンスでさらに取るとなると、大企業でしか導入できないようなイメージがありますが。。。どうなんでしょうか。