Performance 如何确定PerlLogHandler性能影响?
我想创建一个定制的Apache2日志处理程序,apache站点上的模板是:Performance 如何确定PerlLogHandler性能影响?,performance,perl,apache2,mod-perl2,Performance,Perl,Apache2,Mod Perl2,我想创建一个定制的Apache2日志处理程序,apache站点上的模板是: #file:MyApache2/LogPerUser.pm #--------------------------- package MyApache2::LogPerUser; use strict; use warnings; use Apache2::RequestRec (); use Apache2::Connection (); use Fcntl qw(:flock); use File::Spec:
#file:MyApache2/LogPerUser.pm
#---------------------------
package MyApache2::LogPerUser;
use strict;
use warnings;
use Apache2::RequestRec ();
use Apache2::Connection ();
use Fcntl qw(:flock);
use File::Spec::Functions qw(catfile);
use Apache2::Const -compile => qw(OK DECLINED);
sub handler {
my $r = shift;
my ($username) = $r->uri =~ m|^/~([^/]+)|;
return Apache2::Const::DECLINED unless defined $username;
my $entry = sprintf qq(%s [%s] "%s" %d %d\n),
$r->connection->remote_ip, scalar(localtime),
$r->uri, $r->status, $r->bytes_sent;
my $log_path = catfile Apache2::ServerUtil::server_root,
"logs", "$username.log";
open my $fh, ">>$log_path" or die "can't open $log_path: $!";
flock $fh, LOCK_EX;
print $fh $entry;
close $fh;
return Apache2::Const::OK;
}
1;
羊群的性能成本是多少?这个日志记录过程是与HTTP请求并行完成的,还是串行完成的?同时,性能也没有那么重要,但我不希望用户再等一秒钟再添加类似的内容。与其过于担心成本,不如试试看 首先,使用
ab
或您最喜欢的Web服务器测试仪对当前配置进行基准测试。许多人忘记了这第一步
接下来,实施您的更改并重试。比较结果
一些可能有用的链接。它们可能有点过时,但基本原理是一样的:
羊群
操心太多。如果您不喜欢它们,可以通过其他各种方式解决,包括:
- 为每个子级写入不同的文件并在以后合并
- 将消息发送到对消息进行排序的单个进程
- 写入数据库(单进程思想的更具体示例)
- 设置自定义日志格式并让apache处理
ab
或您最喜欢的Web服务器测试仪对当前配置进行基准测试。许多人忘记了这第一步
接下来,实施您的更改并重试。比较结果
一些可能有用的链接。它们可能有点过时,但基本原理是一样的:
羊群
操心太多。如果您不喜欢它们,可以通过其他各种方式解决,包括:
- 为每个子级写入不同的文件并在以后合并
- 将消息发送到对消息进行排序的单个进程
- 写入数据库(单进程思想的更具体示例)
- 设置自定义日志格式并让apache处理
顺便说一下,日志处理程序在发送请求后运行,因此如果日志处理程序暂时停止,则不会对用户的性能产生影响。在服务器过载之前,ab的输出也不会受到明显的影响,这将很难区分集群的影响。在ab测试运行期间,您必须观察一些磁盘IO指标,以查看是否存在问题。我发现群集是一个必要的问题,尤其是在Solaris上,而且即使在负载很重的服务器上,我也没有遇到性能问题。当您处理许多并发请求时,它们是必需的;没有它们,你会得到日志条目写在其他日志条目的中间。布赖恩的变通办法会奏效,但第二个和第三个将引入他们自己的瓶颈,这可能比羊群更糟糕 顺便说一下,日志处理程序在发送请求后运行,因此如果日志处理程序暂时停止,则不会对用户的性能产生影响。在服务器过载之前,ab的输出也不会受到明显的影响,这将很难区分集群的影响。在ab测试运行时,您必须观察一些磁盘IO指标,以查看是否存在问题