[Unix] free – メモリの利用状況を表示する

まずは –help で指定可能なオプションを確認。

オプションを何も指定しなければKB単位で表示されるみたい。

-h オプションで人間が読みやすい単位にしてくれる。

繰り返し表示したければ -s で間隔(秒)と -c で回数を指定する。

カラムの意味

参考サイトより:

Mem – ページキャッシュとバッファキャッシュを考慮しないメモリサイズ

  • total – OSが認識している物理的なメモリサイズ。RAIDカードやNICなどを装着しているときは、それらのためにメモリが使われるので実際の搭載メモリサイズよりも少なくなります。
  • used – 使用しているメモリサイズ。これにはバッファキャッシュやページキャッシュなどOSがディスクキャッシュのために使用しているメモリも含まれます。
  • free – 空きメモリサイズ。この値にはバッファキャッシュとページキャッシュが含まれていません。一般にLinuxは使い続けるほど、メモリをキャッシュに割り当てます。そのため使い続けるほどfreeの値はゼロに近づきます。この値が少ないからといって空きメモリがないわけではないことに注意してください。
  • shared – 共有メモリに割り当てられたメモリ。
  • buffers – バッファキャッシュに割り当てたメモリ。バッファキャッシュはブロックデバイス用のキャッシュです。
  • cached – ページキャッシュに割り当てたメモリ。ページキャッシュはファイルに対するキャッシュです。

-/+buffers/cache – ページキャッシュとバッファキャッシュを考慮したメモリサイズ

  • used – 1行目のusedからページキャッシュとバッファキャッシュを引いた値。OSとアプリケーションが純粋に使用しているメモリサイズを表します。
  • free – 1行目のfreeにページキャッシュとバッファキャッシュを足した値。キャッシュに割り当てられているメモリを自由に割り当て可能なメモリと考えれば、この値が空きメモリサイズになります。

Swap – スワップに割り当てたサイズ。

  • total – スワップに割り当てたディスクサイズ。
  • used – 割り当てた中で使用中のサイズ。
  • free – 割り当てた中で使用していないサイズ。

参考サイト

【 free 】コマンド――メモリの利用状況を表示する:Linux基本コマンドTips(125) – @IT
https://www.atmarkit.co.jp/ait/articles/1707/07/news014.html

freeコマンドで確認するOSのメモリ情報 – SHOYAN BLOG
http://48n.jp/blog/2016/05/08/learn-the-memory-with-free-command/

4.メモリ使用率(第5章 パフォーマンス管理~上級:基本管理コースII)
https://users.miraclelinux.com/technet/document/linux/training/2_5_4.html

[Unix] ps – 実行中のプロセスを一覧表示する

よく使う割に使いこなせていないので再勉強。

まずは –help で指定可能なオプションを確認。

自分のプロセスを表示する。

l オプションを付けるとロング形式で表示される。

良く使われるのは aux オプション。全ユーザが実行しているプロセスを表示する。

  • a – 端末を持つ全てのプロセスを表示する
  • x – 端末を持たない全てのプロセスを表示する
  • u – ユーザー指向のフォーマット(読みやすさ優先)で表示する

-L オプションを指定すればスレッドを表示できる。

grepで絞る代わりに -C オプションでコマンド指定すればヘッダが表示できる。

カラムの意味

  • F – プロセスの状態(16進表記)
    00- 終了
    01 – システム上の常駐プロセス
    02 – 親プロセスからトレースされている
    04 – 親プロセスからトレースされている状態で停止している
    08 – 起動不可能
    10 – プロセスがメモリ上にありイベント終了までロックされている
    20- スワップ不可能
  • PID – プロセスのID番号
  • PPID – 親プロセスのID番号
  • S – プロセスの状態表示
  • STAT – 複数文字によるプロセスの状態表示
    ▼1文字目
    R – 実行中/実行可能な状態
    S – スリープ状態
    D – スリープ状態(割り込み不可) (ディスク待ちが多い)
    T – 停止またはトレース中(シェルでCtrl+Zキーで停止している時など)
    Z – ゾンビプロセス(終了しているのにメモリに残ってしまっているプロセス)
    ▼2文字目以降
    + – フォアグラウンドのプロセスグループ
    s – セッションリーダー
    < – 優先度が高いプロセス
    N – 優先度が低いプロセス
    l – マルチスレッドのプロセス
  • %CPU – CPUの使用率 (CPU利用時間/実際の時間)
  • %MEM – メモリの使用量 (プロセスが確保している物理メモリを百分率で表示)
  • VSZ(Virtual Set Size) – プロセスが確保した仮想メモリ領域のサイズ (KB)
  • RSS(Resident Set Size) – プロセスが確保した物理メモリ領域のサイズ (KB)
  • TIME – CPUの累積使用時間
  • STARTED – コマンドが起動した時刻
  • NI – nice値(プロセスの優先順位)範囲は-20~19で、19が優先度が一番高い
  • COMMAND – コマンド名
  • TT – 制御端末(tty)
  • UID – 実効ユーザーのID番号
  • USER – 実効ユーザーの名前
  • GID – 実効グループのID番号
  • GROUP – 実効グループの名前
  • LWP – 軽量プロセスもしくはスレッドのID
  • NLWP – 総スレッド数

参考サイト

Man page of PS
http://linuxjm.osdn.jp/html/procps/man1/ps.1.html

【 ps 】コマンド――実行中のプロセスを一覧表示する:Linux基本コマンドTips(6) – @IT
https://www.atmarkit.co.jp/ait/articles/1603/28/news022.html

psコマンドで表示される内容について調べた – Qiita
https://qiita.com/toshihirock/items/565fe71d778d3ee36b96

psコマンドまとめ – Qiita
https://qiita.com/shell/items/68ed71a7f018e5688f73

psコマンドでスレッドを表示させたり、スレッドごとのCPU使用率を確認する – 元RX-7乗りの適当な日々
https://www.na3.jp/entry/20101219/p1

30 Useful ‘ps Command’ Examples for Linux Process Monitoring
https://www.tecmint.com/ps-command-examples-for-linux-process-monitoring/

[Unix] pstree – プロセスの親子関係をわかりやすく表示する

インストール (CentOS 7)

psmiscというパッケージに含まれているらしい。

インストールする。

使い方

全プロセス(プロセスID1を先祖に持つプロセス)をツリー形式で表示する。子プロセスが複数存在する場合は、7*といったように冒頭にその個数が表示される。画面に収まり切れない場合はmoreでつなぐと良い。

-p オプションを指定するとプロセスIDも表示される。

プロセスIDを指定すると、そのプロセスを親に持つプロセスだけを表示できる。

参考サイト

【 pstree 】コマンド――プロセスの親子関係を分かりやすく表示する:Linux基本コマンドTips(7) – @IT
https://www.atmarkit.co.jp/ait/articles/1603/29/news024.html

CentOS7を最小インストールしたらpstreeがなかった – Qiita
https://qiita.com/nekootoko3/items/b9159d13cd4d3e689aca

[Apache] 特定のURLにBasic認証をかける

LocationやLocationMatchは.htaccessには使えない。

参考サイト

.htaccess の書き方(アクセス制御編) – Qiita
https://qiita.com/shotets/items/17bed9029140a6d925d2

[Apache] event MPMはSSLではworker MPMになるのか

スタンフォード大学のApache 2.4ドキュメントにそういった記載がある。更新日時は書かれていないが、フッタの著作権表記は2012年と古い。

event – Apache HTTP Server
http://webauth.stanford.edu/manual/mod/event.html

How it Works
The improved connection handling does not yet work for certain connection filters, in particular SSL. For SSL connections, this MPM will fall back to the behaviour of the worker MPM and reserve one worker thread per connection.

本家ドキュメントに当たってみる。該当ページには明確に「SSLでは」と書かれていないものの、同じような表記がある。「eventと互換性が無いと謳っている特定のコネクションフィルターに関しては」といった言い回しだけど。こちらも更新日時は見当たらないが、フッタの著作権表記は2019年と新しい。

event – Apache HTTP Server Version 2.4
https://httpd.apache.org/docs/2.4/mod/event.html

Limitations
The improved connection handling may not work for certain connection filters that have declared themselves as incompatible with event. In these cases, this MPM will fall back to the behavior of the worker MPM and reserve one worker thread per connection. All modules shipped with the server are compatible with the event MPM.

日本語のブログ記事に同じような記述があった。しかし、この記事も作成日付は2013年と古い。

Apache2.4新機能 ~MPMのevent~ その2 | しんじつのなみだ
http://apache24.jugem.jp/?eid=6

mod_eventの制約
ただし、mod_eventのこのkeepaliveの恩恵を受けられるのはHTTP通信の時だけです。
SSL通信を行う場合は、worker坂と同じになります。すなわちHTTPSとしてApacheをサービス提供するときは、mod_eventを使ってもkeepaliveの待ち時間は他の人からのリクエストを処理できません。

はっきりしたことは自分で調べるしかないのか。

[Apache] Apache Bench 入門

Apache Benchを使う必要があったので入門。

インストール

httpdに同梱されているので、httpdをインストールすれば一緒に入る。

使い方

キーになるオプションは以下の2つ。

  • -n <数字> 総リクエスト数
  • -c <数字> 同時リクエスト数

例えば100ユーザが同時に10回リクエストする場合、総リクエスト数は100×10=1000になるので以下のようになる。その他のオプションは参考サイトを見るべし。

Basic認証が掛かっているサイトの場合は -A オプションを指定する。

  • -A ユーザ名:パスワード

結果の見方

リクエストは正常に処理されたのか?

  • Complete requests (正常に処理されたリクエスト数)
  • Failed requests (処理に失敗したリクエスト数)

パフォーマンスを評価する

  • Requests per second (1秒間にさばけるリクエスト数)
  • Time per request(mean, across all concurrent requests) (1リクエストあたりの処理時間)
  • ちなみに Time per request(mean) は全リクエストの処理時間

サーバーの限界点を探す

  • -n と-c の値を徐々に増やす
  • Failed requestsが0で無くなったところがWebサーバーの負荷の限界

参考サイト

【初心者向け】ApacheBench入門 | DevelopersIO
https://dev.classmethod.jp/tool/ab-tutorial/

Apache Benchでサクッと性能テスト – Qiita
https://qiita.com/flexfirm/items/ac5a2f53cfa933a37192

Apache Bench(ab)を使って初めての負荷検証を行う – Simple IT Life
https://simple-it-life.com/2016/08/28/apache-bench/

[Apache] 参考記事 PHPのモジュール版とCGI版&FastCGI

解説

PHPのモジュール版とCGI版の違い – Qiita
https://qiita.com/SuguruOoki/items/269389f242bd1cd3facb
2018-07-25

CGI
– CGIを動かすユーザはWebサーバー本体を動かすユーザと異なる
– 故にセキュリティ面で利がある (他ユーザに干渉してしまう危険が無い)
– サーバー複数台運用の際に依存が少ないことによる移行のしやすさ
– 実行する旅にメモリのロードが必要となるが故に処理速度が遅くなる →FastCGIで解決

モジュール
– PHPがWebサーバーを動かすユーザで動作する
– 故に共用サーバー等ではセキュリティ面で不安がある →セーフモードで解決
– Webサーバーのプロセスで実行されるためCGI版と比べて処理速度が高速

ベンチマーク

FastCGI vs suPHP vs Apache Module Performance PHP Comparison
https://www.webhostinghero.com/blog/benchmark-fastcgi-vs-suphp-vs-apache-module-php-performance-comparison/
Mar 17, 2018

簡単なスクリプト(単純ループ処理)を使ったPHP実行ベンチマーク結果。
– FastCGI: 4.8233秒
– Apacheモジュール: 5.0862秒
– suPHP: 6.5283秒

PHP-FPM Cuts Web App Loading Times by 300%
https://www.cloudways.com/blog/php-fpm-on-cloud/
August 23, 2016

DigitalOcean 4GBサーバーでWordPressを使ったベンチマーク結果。詳細不明。

mod_PHP
– 295.0秒間に38,046ヒット
– データ転送 IN:7,399.11KB/OUT:206,219.42KB
– 平均ヒットレート 128.0/秒 (1日換算1,1059,200ヒット)

PHP-FPM
– 295.0秒間に85,829ヒット
– データ転送 IN:16,465.18KB/OUT:465,728.74KB
– 平均ヒットレート 290.0/秒 (1日換算25,056,000ヒット)

[Apache] アクセス制限時にデフォルトページが表示される場合の対処

バーチャルホストで.htaccessを配置し、以下のように特定IPでアクセス制限を設定した。

すると、そのIPからアクセスするとApacheのデフォルトページが表示された。デフォルトページを表示せずにブラウザが403を表示するようにしたいんだけど。

403のハンドリングを設定している箇所を調べたら以下にあった。

/etc/httpd/conf.d/welcome.conf

冒頭のコメントにWelcomeページを無効化したければ、以下の全てのラインをコメントアウトしろとある。それに従ってコメントアウトしてApacheを再起動したらブラウザに403 Forbiddenが表示されるようになった。