Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何确定PerlLogHandler性能影响?_Performance_Perl_Apache2_Mod Perl2 - Fatal编程技术网

Performance 如何确定PerlLogHandler性能影响?

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:

我想创建一个定制的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::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处理

我发现羊群是一个必要的恶魔,特别是在Solaris上,即使在负载很重的服务器上,我也没有遇到性能问题。当您处理许多并发请求时,它们是必需的;没有它们,你会得到日志条目写在其他日志条目的中间。布赖恩的变通办法会奏效,但第二个和第三个将引入他们自己的瓶颈,这可能比羊群更糟糕


顺便说一下,日志处理程序在发送请求后运行,因此如果日志处理程序暂时停止,则不会对用户的性能产生影响。在服务器过载之前,ab的输出也不会受到明显的影响,这将很难区分集群的影响。在ab测试运行期间,您必须观察一些磁盘IO指标,以查看是否存在问题。

我发现群集是一个必要的问题,尤其是在Solaris上,而且即使在负载很重的服务器上,我也没有遇到性能问题。当您处理许多并发请求时,它们是必需的;没有它们,你会得到日志条目写在其他日志条目的中间。布赖恩的变通办法会奏效,但第二个和第三个将引入他们自己的瓶颈,这可能比羊群更糟糕

顺便说一下,日志处理程序在发送请求后运行,因此如果日志处理程序暂时停止,则不会对用户的性能产生影响。在服务器过载之前,ab的输出也不会受到明显的影响,这将很难区分集群的影响。在ab测试运行时,您必须观察一些磁盘IO指标,以查看是否存在问题