10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

IBM HTTP Serverのスレッド数をログから確認する

Posted at

IBM HTTP Serverは標準でスレッドの状態とスレッド数をログに記録してくれています。
障害発生時にログを確認することで、処理中のスレッドで処理待ちになっていたのか、などを確認することができます。

■出力ファイル
error.log

■設定ファイル
httpd.conf

LoadModule mpmstats_module modules/debug/mod_mpmstats.so
<IfModule mod_mpmstats.c>
# Write a record every 10 minutes (if server isn't idle).
# Recommendation: Lower this interval to 60 seconds, which will
# result in the error log growing faster but with more accurate
# information about server load.
ReportInterval 600
# Include details of active module in the statistics.
TrackModules On
</IfModule>

■出力形式

[Sat Apr 10 13:28:30 2021] [notice] mpmstats: rdy 0 bsy 600 rd 16 wr 578 ka 6 log 0 dns 0 cls 0

<各カラムの説明>

スレッドの状態
rdy 待機状態のスレッド数
bsy 処理中のスレッド数
rd 読み取り中のスレッド数
wr 書き込み中のスレッド数
ka キープアライブ接続中のスレッド数
log ログ出力中のスレッド数
dns DNSルックアップ中のスレッド数
cls 終了処理中のスレッド数

mod_mpmstatsに付いての説明

rdy + bsy がスレッド数の上限(httpd.confに設定)となります。
IBM HTTP ServerのバックエンドであるWebSphere Application Serverで処理が滞留すると、
bsyが増加していきます。

障害発生時刻あたりを目視でみることもありますが、
一日、数日の推移を見たいこともあります。
力技ですが後述のバッチファイルを作成して、CSV形式に変換してExcelなどで確認しています。

元ファイル
[Sat Apr 10 13:28:30 2021] [notice] mpmstats: rdy 0 bsy 600 rd 16 wr 578 ka 6 log 0 dns 0 cls 0
[Sat Apr 10 13:28:59 2021] [notice] mpmstats: rdy 0 bsy 600 rd 16 wr 584 ka 0 log 0 dns 0 cls 0
[Sat Apr 10 13:31:30 2021] [notice] mpmstats: rdy 0 bsy 600 rd 9 wr 591 ka 0 log 0 dns 0 cls 0

変換後
time,rdy,bsy,rd,wr,ka,log,dns,cls
13:28:30,0,600,16,578,6,0,0,0
13:28:59,0,600,16,584,0,0,0,0
13:31:30,0,600,9,591,0,0,0,0

■実行方法
check_TPC.bat error.log

@ECHO OFF
REM #**************************************************************************
REM # FILE_NAME  : check_TPC.bat
REM # FUNCTION   : IHSのエラーログからスレッド数(TreadsPerChild)を抜き出し
REM #**************************************************************************
REM # <各カラムの説明>
REM #**************************************************************************
REM # rdy 待機状態のスレッド数
REM # bsy 処理中のスレッド数
REM # rd  読み取り中のスレッド数
REM # wr  書き込み中のスレッド数
REM # ka  キープアライブ接続中のスレッド数
REM # log ログ出力中のスレッド数
REM # dns DNSルックアップ中のスレッド数
REM # cls 終了処理中のスレッド数

:SetCommonEnv
REM # ----------------------------------------------
REM # 共通処理
REM # ----------------------------------------------
TITLE [%0]

SET CURRDIR=%~dp0
SET WORKDIR="%CURRDIR%"
SET LOGDIR=%WORKDIR%

CD /D %WORKDIR%

REM ----------------------------------------------
REM  チェック対象ファイル名を設定
REM ----------------------------------------------
SET FILENAME=error.log
IF NOT "%1"=="" (
   SET FILENAME=%1
)
SET FILENAMEONLY=%FILENAME:~0,-4%

REM ----------------------------------------------
REM ファイルの存在チェック
REM ----------------------------------------------
IF NOT EXIST %FILENAME% (
   ECHO # FILE NOT EXIST : %FILENAME%
   GOTO ErrEnd
)

ECHO # ----------------------------------------------
ECHO # [%0] IHSスレッド数 チェック開始
ECHO # ----------------------------------------------
ECHO # [%0] 開始時間    :[%DATE% %TIME%]
ECHO # [%0] 対象ファイル名 :%FILENAME%

:SetLogName1
REM # ----------------------------------------------
REM # ログファイル名を設定
REM # ----------------------------------------------
SET LOGSTEM1=TPC
SET LOGNAME1=%LOGSTEM1%_%FILENAMEONLY%.csv
SET LOGFILE1=%LOGNAME1%

IF EXIST %LOGFILE1% DEL %LOGFILE1%

FINDSTR /I /C:"mpmstats: rdy " /M %FILENAME% >NUL 2>&1
IF NOT "%ERRORLEVEL%"=="0" GOTO SetLogName2

ECHO time,rdy,bsy,rd,wr,ka,log,dns,cls> %LOGFILE1%
FINDSTR /I /C:"mpmstats: rdy " %FILENAME% > %LOGFILE1%.tmp
FOR /F "tokens=4,9,11,13,15,17,19,21,23 delims= " %%a in (%LOGFILE1%.tmp) DO (
 ECHO %%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i>>%LOGFILE1%
)

DEL %LOGFILE1%.tmp

:SetLogName2
:END
ECHO # ----------------------------------------------
ECHO # [%0] IHSスレッド数チェック終了                    
ECHO # ----------------------------------------------
ECHO # [%0] 終了時間    :[%DATE% %TIME%]
EXIT /b 0

:ErrEND
REM PAUSE

出力したファイルはExcelなどでグラフにすると推移が見やすいです。
image.png

■スレッド数の設定について

スレッド数の上限に達すると、error.logに以下のメッセージが記録されます。

12:09:42 reached ThreadsPerChild (600/600)

スレッド数の上限を上げる場合は、httpd.confのThreadLimitとThreadsPerChildを変更します。
変更後に、反映するためにIBM HTTP Serverサービスの再起動が必要です。

■設定ファイル
httpd.conf

# Windows MPM
#
# For tuning recommendations, refer to <NEWINFOCENTERURL>.
#
# ThreadLimit: maximum setting of ThreadsPerChild
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_winnt.c>
ThreadLimit         600
ThreadsPerChild     600
MaxRequestsPerChild  0
</IfModule>

以上です。

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?