Apache通过管道记日志对性能的影响
如果访问量比较小,则,使用管道可能比只直接写文件要快那么一点点(不会太明显),因为写管道毕竟是些内存(但是操作系统层面对写文件也是有优化的)
如果访问量很大,多个进程并发写一个管道,而只有一个进程在读管道,写日志文件,则,管道很容易写慢导致处理进程阻塞,这时,管道产生的瓶颈是很明显的,可能会导致Apache 的处理性能减少一个数量级;而且你看到的将是cpu idle很高,iowait很低,但是loadaverage 却很高。
关于Apache管道日志:
man.ddvip/soft/apache2.0/logs.html#piped
Apache httpd 可以通过管道将访问记录和出错信息转交给另一个进程,而不是写入一个文件,由于无须对主服务器编程,这个功能显著地增强了日志的灵活性。只要用管道操作符"|",后面跟可执行文件名,就可以使这个程序从标准输入设备获得事件记录。Apache在启动时,会同时启动这个管道日志进程,而且在运行中,如果这个进程崩溃了,会重新启动这个进程(所以我们称这个技术为“可靠管道日志”)。
管道日志进程由其父进程Apache httpd 产生,并继承其用户权限,这意味着管道进程通常是作为root运行的,所以保持这个程序简单而安全极为重要。
一些使用管道日志的例子,其用法在访问日志和出错日志中都相同:
log4j2 appender
# compressed logs
CustomLog "|/usr/bin/gzip -c >> /var/log/" common
# almost-real-time name resolution
CustomLog "|/usr/local/apache/bin/logresolve >> /var/log/access_log" common
注意,调用管道程序的参数要用引号括起来。
管道日志的一种重要用途是,允许日志回卷而无须重新启动服务器,为此,Apache HTTP服务器提供了一个简单的程序rotatelogs。每24小时回卷日志一次的例子如下:
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
在其他站点,有一个类似而更灵活的日志回卷程序叫cronolog。
如果有较简单的离线后处理日志方案,就不应该用有条件日志和管道日志,即使它们非常强大。
关于apache rotatelogs 滚动日志:
hi.baidu/andrew_crystal/blog/item/fce6d9bfdec2400218d81f6e.html
so/archives/134
Apache写日志优化
写入日志信息是一个很花费时间的工作,apache保持日志文件的打开状态以节省打开文件的时间,如果没有必要存储日志信息,你可以关闭这个选项以节省出更多的处理器时间,只需要在设置文件中把日志那一行注释掉就可以关掉它。
如果必须保留日志,你可以关闭hostnamelookups选项,然后把日志文件拷备到另一台机器上做进一步分析。
hostnamelookups off
域名查:这增加了处理每个请求的开销,首先,服务器会对dns系统做一个反向查询以出客户系统的主机名,然后又进行正向查询看获得的主机名是否真实指向客户的ip。大多数情况下,你可以简单的关闭这个功能,如果你经常处理服务器日志,这个工作完全可以在以后进行。你可以通过在设置文件中加入指示hostnamelookups off来关闭这个功能。
Apache写日志的性能监控
1、设置f:
#
# The location and format of the access logfile (Common Logfile
Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog "F:/wamp/logs/access.log" common
2、用ab请求页面:
F:\wamp\bin\apache\Apache2.2.21\bin>ab -n 10000 -c 100 127.0.0.1:81/ecshop
3、监控磁盘IO情况:
扩展阅读
log4j日志异步化大幅提升系统性能
raymondhekk.iteye/blog/229937
经过大型J2EE项目实测,Log4j的日志输出对系统性能有比较显著的影响,尤其是日志输入量比较大时,例如:系统并发量很大,显示Hibernate的sql和参数日志,或日志级别较低DEBUG或INFO时等。
使用Async Logger控制日志输出可以显著改善系统性能。
1)测试用例:同步文件日志输出
测试功能:模块管理功能,
输出Hibernate SQL和参数,输出到文件,配置如下:
<appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="log/Hibernate_SQL.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" />
</layout>
</appender>
<category name="org.hibernate.SQL">
<priority value="TRACE" />
<appender-ref ref="Hibernate_SQL" />
</category>
<category name="pe">
<priority value="TRACE" />
<appender-ref ref="Hibernate_SQL" />
</category>
运用JMeter进行压力测试,线程数50,运行4次,计算请求平均响应值(Rame-up Period: 1,循环次数:1)
测试结果:AVG: 12565ms
2)测试用例:异步文件日志输出
<appender name="ASYNC_Hibernate_SQL" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="512"/>
<appender-ref ref="Hibernate_SQL"/>
</appender>
<category name="org.hibernate.SQL">
<priority value="TRACE" />
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>
<category name="pe">
<priority value="TRACE" />
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>
在BufferSize为 32, 64,128,256,512,2048时测试的请求平均耗时,及较测试用例1中的性能提高率对比如下所示:
同步,异步日志性能对
(每次50并发,运行4次)
比分析
sync 日志输出原时间消耗
12565
async 日志输出
缓冲区大小平均耗时性能提高率32674446.33% 64848732.46% 128689945.09% 256660647.43% 512730641.85% 2048340672.89%
从结果可以看出,性能提高率最高 47%。最低32%。缓冲为256时性能改善最佳,提高47%
结论:使用Log4j的J2EE应用,日志的优化对系统性能有显著影响:
1)尽量减少不必要的日志输出,尤其要避免 root logger上过低级别的输出,避免在生产环境上向控制台输出日志。例如,下面的配置是很影响性能的,:
<root>
<priority value="DEBUG" />
<appender-ref ref="CONSOLE" >
</root>
2)使用Async logger输出日志,buffersize在相应日志频率下,越大越好,对于大型项目,可以选2048以上值。
如何减少大量写log对性能测试的影响
teamojiao.iteye/blog/456767
当前定义的性能测试介入点,是功能测试第一轮结束之后。而第一能测试主要目的是发现bug,此时介入可能会该性能测试带来一些不必要的麻烦。
最常见的问题,就是页面vm存在bug。当页面被大量访问时,velocity log里每次都打印出vm的错误日志。假定每条日志为200bytes,每秒的访问量为30,一秒的日志量就为200*30=6,000bytes。约为 5.86K。以这样的速度计算,一分钟就会达到351.6K。随着时间的推移,日志量是相当可怕的。如果vm上有多处错误,日志量将更加恐怖。
模版的bug是功能问题,本身是不会影响系统性能的。但是当log达到一定量之后,比如单个文件1G,影响的效果就比较明显了。为了这么大的文件再继续往里写,是会消耗服务器资源的。
怎么办?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。