23

Windows for ASP では perfmon を取得できますが...

LinuxでApacheの「1秒あたりのリクエスト」を取得するには?

4

9 に答える 9

27

これは、リクエスト率をサンプリングするために作成した短いbashスクリプトです(ログファイルでの使用に関するdicroceの提案wc -lに基づいています)。

#!/bin/sh

##############################################################################
# This script will monitor the number of lines in a log file to determine the
# number of requests per second.
#
# Example usage:
# reqs-per-sec -f 15 -i /var/www/http/access.log
#
# Author: Adam Franco
# Date: 2009-12-11
# License: http://www.gnu.org/copyleft/gpl.html GNU General Public License (GPL)
##############################################################################

usage="Usage: `basename $0` -f <frequency in seconds, min 1, default 60> -l <log file>"

# Set up options
while getopts ":l:f:" options; do
 case $options in
 l ) logFile=$OPTARG;;
 f ) frequency=$OPTARG;;
 \? ) echo -e $usage
  exit 1;;
 * ) echo -e $usage
  exit 1;;

 esac
done

# Test for logFile
if [  ! -n "$logFile" ]
then
 echo -e $usage
 exit 1
fi

# Test for frequency
if [  ! -n "$frequency" ]
then
 frequency=60
fi

# Test that frequency is an integer
if [  $frequency -eq $frequency 2> /dev/null ]
then
 :
else
 echo -e $usage
 exit 3
fi

# Test that frequency is an integer
if [  $frequency -lt 1 ]
then
 echo -e $usage
 exit 3
fi

if [ ! -e "$logFile" ]
then
 echo "$logFile does not exist."
 echo 
 echo -e $usage
 exit 2
fi

lastCount=`wc -l $logFile | sed 's/\([0-9]*\).*/\1/'`
while true
do
 newCount=`wc -l $logFile | sed 's/\([0-9]*\).*/\1/'`
 diff=$(( newCount - lastCount ))
 rate=$(echo "$diff / $frequency" |bc -l)
 echo $rate
 lastCount=$newCount
 sleep $frequency
done
于 2009-12-11T22:03:43.013 に答える
16

リアルタイムで、またはmod_statusを使用できますか?

そしてどうやら、Apache用のtopのバージョンがあります...

于 2008-12-05T23:58:53.420 に答える
13

要約すると、 mod_statusapachetopを使用できます。

別の方法として、Adam Franco と Jon Daniel の素敵なスクリプトを使用してライブの外観を作成することもできます。

特定の日付と時刻を見たい場合は、次の小さなコマンドを発行できます。

grep "29/Oct/2014:12" /var/log/apache2/example.com.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c | awk '{ if ($1 > 10) print $0}'

関心のある日付と時間、およびログ ファイルの適切なパス ファイル名に置き換えます。

次のようなものが出力されます。

1913 12:47
 226 12:48
 554 12:49
 918 12:50

awk、cut、および uniq コマンドの組み合わせを使用して、この種の迅速な統計を取得するためのより多くのオプションを含む素晴らしい記事がここにあります。

于 2014-10-29T13:50:49.677 に答える
5

アクセスログで「wc -l」を使用して行数を取得できます(これはリクエスト数にほぼ対応しています...)毎分それを行い、最後の値を差し引いてデルタを取得します...

于 2008-12-06T00:11:16.487 に答える
3

mod_status でできると思います...

http://httpd.apache.org/docs/2.0/mod/mod_status.html

コミュニティ Apache プラグインを使用して、zenoss を使用して mod_status からデータを収集することもできます。

http://www.zenoss.com/

于 2008-12-05T23:58:45.653 に答える
3

スクリプトが一貫性のない数値を示しています。-fパラメータは出力に大きく影響します! また、最初の読み取りも正確ではありません。

私は最終的に使用しました:

while true; do tail -n0 -f access.log>/tmp/tmp.log & sleep 2; kill $! ; wc -l /tmp/tmp.log | cut -c-2; done 2>/dev/null

ここにあります

于 2011-09-19T10:55:50.497 に答える
2

過去 1、5、および 15 分間 (top など) の 1 秒あたりの平均リクエスト数を表示する一連の Perl スクリプトを作成しました。https://gist.github.com/1040144にあります。

于 2011-06-22T18:38:51.843 に答える