配置tomcat容器的access.log访问日志

本帖最后由 lqph3387 于 2010-12-14 15:03 编辑

编译server.xml文件,在
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
下追加如下信息:     
   <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access." suffix=".log" pattern="combined" resolveHosts="false"/>

容器比较 tomcat jboss resion weblogic websphere

1. Tomcat是Apache鼎力支持的Java Web应用服务器,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。&shy;

2. Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器,从而受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾。&shy;

3. Resin也仅仅是一个Servlet容器,然而由于它优秀的运行速度,使得它在轻量级Java Web领域备受喜爱,特别是在互联网Web服务领域,众多知名公司都采用其作为他们的Java Web应用服务器,譬如163、ku6等。&shy;商用应用服务器里主要有:Weblogic、Websphere,其中Weblogic我也使用过很长一段时间,当时也只用其当Servlet容器,然而就在同等条件下,在性能及易用性等方面,要比Tomcat优秀很多。

配置tomcat启动时的优化参数

本帖最后由 lqph3387 于 2010-12-14 14:23 编辑

编译tomcat安装目录下的bin/catalina.sh文件,增加一句:JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

具体做法,打开catalina.sh,搜索关键字$have_tty -eq 1,在if [ $have_tty -eq 1 ]; then行下增加:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

修改后如下:
if [ $have_tty -eq 1 ]; then
  JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
  echo "Using CATALINA_BASE:   $CATALINA_BASE"
  echo "Using CATALINA_HOME:   $CATALINA_HOME"
  echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
  if [ "$1" = "debug" ] ; then
    echo "Using JAVA_HOME:       $JAVA_HOME"
  else
    echo "Using JRE_HOME:        $JRE_HOME"
  fi
  echo "Using CLASSPATH:       $CLASSPATH"
fi

apache 虚拟主机配置文档

E.配置Apache虚拟主机
配置文件为:/usr/local/apache2/conf/extra/httpd-vhosts.conf
将配置文件中下面一段修改为如下:
<VirtualHost *:80>
  # ServerAdmin [email protected]
    DocumentRoot "/www/wwwroot/supesite"
    ServerName www.www.com.cn
    ErrorLog "|/usr/local/cronolog/sbin/cronolog /www/logs/error.log-%Y%m%d"
    CustomLog "|/usr/local/cronolog/sbin/cronolog /www/logs/access.log-%Y%m%d" combined
    </VirtualHost>

<VirtualHost *:80>
  # ServerAdmin [email protected]
    DocumentRoot "/www/wwwroot/ucenter"
    ServerName uc.www.com.cn
    ErrorLog "|/usr/local/cronolog/sbin/cronolog /www/logs/error.log-%Y%m%d"
    CustomLog "|/usr/local/cronolog/sbin/cronolog /www/logs/access.log-%Y%m%d" combined
</VirtualHost>

<VirtualHost *:80>
  # ServerAdmin [email protected]
    DocumentRoot "/att/attachments"
    ServerName att.www.com.cn
</VirtualHost>

说明:
ServerAdmin 参数后为管理员email
DocumentRoot 指的是论坛文件存放的目录
ServerName  是论坛的域名
ErrorLog 是论坛错误日志  通过管道使用cronolog工具将日志切割为每天一个文件
CustomLog 是论坛访问日志 通过管道使用cronolog工具将日志切割为每天一个文件
<IfModule mod_rewrite.c> 和</IfModule> 包含的字段是rewrite部分,实现URL静态化

配置tomcat的内置监控

本帖最后由 lqph3387 于 2010-12-14 14:42 编辑

1,编译tomcat安装目录下的conf/tomcat-users.xml文件,在<tomcat-users>和</tomcat-users>之间注释或删除掉所有的默认账户和权限,新加一个权限如下:
<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="adminws" roles="admin,manager"/>
</tomcat-users>
2,访问http://yourhost:port/manager/status 时给出admin的用户名与口令,就可以查看到应用服务器的相关性能指标数据

resin的安装

本帖最后由 lqph3387 于 2011-1-6 08:38 编辑

在resin的官方http://www.caucho.com/下载resin相应的版本,本文下载的版本是resin-4.0.7.tar.gz ,然后上传至/usr/local/src目录
# tar -zxvf resin-4.0.7.tar.gz

# cd resin-4.0.7

# ./configure --prefix=/usr/local/www/resin --with-java-home=/usr/local/java

# make # make install

# groupadd resin

# useradd -g resin -s /sbin/nologin -M resin

# chown -R resin.resin /usr/local/www/resin

# vi /usr/local/www/resin/conf/resin.xml
修改如下两行内容:

<user-name>resin</user-name>

<group-name>resin</group-name>
/usr/local/www/resin/bin/resin.sh  start
用http://hostip:8080即可访问到resin的默认页面



二、添加resin到系统服务

将make install生成的$RESIN_HOME/init.d/resin复制到/etc/init.d/resin

# cp init.d/resin /etc/init.d/resin

# chmod a+x /etc/init.d/resin

# vi /etc/init.d/resin添加如下两行

# chkconfig: 345 85 15

# description: Resin is a Java Web server.把type log_daemon_msg 1> /dev/null

修改为type echo 1> /dev/null

修改

case "$1" in

  start)

....

  stop)

  .....

中的log_daemon_msg和log_end_msg为echo然后就可以用service resin start|stop来启动和停止resin了



三、resin管理员控制台

注:修改resin配置文件之前要先停止resin

使用http://hostip:8080 打开resin的默认页面

点击Administration is available here处的here

创建一个管理员

# cd /usr/local/www/resin/conf/

# service resin stop

# mv admin-users.xml.generated  admin-users.xml

# service resin start然后就可以使用刚才创建的管理员登陆resin管理员控制台了



四、resin优化

1、优化JVM参数

修改resin.conf文件,在<server-default>节点下增加配置JVM参数的子节点<jvm-arg>。 -Xmx和-Xms的值需要根据服务器内存的大小调整,对于多数应用来说,-Xmx配置成1024M,完全能满足使用要求。通常将-Xms与-Xmx选项的值设置为相同,-Xmn的值为-Xmx的1/4。

<server-default>

    <jvm-arg>-Xms1024m</jvm-arg>

    <jvm-arg>-Xmx1024m</jvm-arg>

    <jvm-arg>-Xmn256m</jvm-arg>

    <jvm-arg>-XX:PermSize=128m</jvm-arg>

    <jvm-arg>-XX:MaxPermSize=256m</jvm-arg>

    <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>

    </server-default>
2、调整图片Cache图片文件的时间

<web-app-default>

      <cache-mapping url-pattern="*.gif" expires="6000s"/>

      <cache-mapping url-pattern="*.jpg" expires="6000s"/>

      <cache-mapping url-pattern="*.png" expires="6000s"/>

    </web-app-default>
3、调整线程池的最大线程数

<server-default>

    <thread-max>1024</thread-max>

    </server-default>4、日志输出

如果不配置stdout-log,那么resin会把System.out输出的信息,自动输出到${resinHome}/log/jvm-default.log文件中,且这个文件不会按天存储,随着时间推移,这个文件会越来越大,最后影响系统效率。

<host>

    <stdout-log path="${resinHome}/log/stdout.log" timestamp="[%Y-%m-%d %H:%M:%S.%s]" rollover-period="1D"/>

    <stderr-log path="${resinHome}/log/stderr.log" timestamp="[%Y-%m-%d %H:%M:%S.%s]" rollover-period="1D"/>

    </host>5、resin-server TIME_WAIT 过多的处理

thread-max指定了最大连接数,socket-timeout是socket超时时间

keepalive-max指定了长连接的数量,这是可以重复使用的连接,netstat -an时系统可以看到响应数量的ESTABLISHED状态

设定keepalive-max和把keepalive-timeout调小可以减少TIME_WAIT的数量。

在<server-default>节点下增加配置

<thread-max>10000</thread-max>

      <socket-timeout>30s</socket-timeout>

      <keepalive-max>512</keepalive-max>

      <keepalive-timeout>60s</keepalive-timeout>6、调整检查程序更新时间间隔的配置

Resin 会在一个指定的周期内,检查一下web-app目录下的classes、jsp、jar以及配置文件是否更新,并且根据检查的情况,确定是否重新装载这些文件。对于生产系统来说,不会经常更新文件,时间间隔应该加长,提高系统的效率。文本框中配置的时间间隔为20分钟。

  <dependency-check-interval>1200s</dependency-check-interval>

tomcat虚拟主机配置示范

本帖最后由 lqph3387 于 2010-12-14 15:08 编辑

<Host name="www.cmdi.com"  appBase="/data/www/wwwroot/www.cmdi.com"
     unpackWARs="false" autoDeploy="true"
     xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="./" debug="0" reloadable="true" crossContext="true"/>
</Host>
以上的内容就是在linux系统中创建/data/www/wwwroot/www.cmdi.com文件夹作为www.cmdi.com这个域名的主目录,如果想配置这个域名的访问日志,如下:

    <Host name="www.cmdi.com"  appBase="/data/www/wwwroot/www.cmdi.com"
     unpackWARs="false" autoDeploy="true"
     xmlValidation="false" xmlNamespaceAware="false">
     <Context path="" docBase="./" debug="0" reloadable="true" crossContext="true"/>  
    <Logger className="org.apache.catalina.logger.FileLogger" directory="/data/www/logs" prefix="www_cmdi_com_access." suffix=".log" pattern="combined"  timestamp="true"/>   
   </Host>

apache配置多个域名指向的虚拟主机访问总是指向第一个虚拟主机

在配置apache多个虚拟主机的时候,访问总是指向第一个虚拟主机,

加上 NameVirtualHost * 后解决问题.



NameVirtualHost *




<VirtualHost *>

    DocumentRoot "F:/web/"

    ServerName localhost

</VirtualHost>




<VirtualHost *>

    DocumentRoot "F:/web/aa/"

    ServerName *.test.com

</VirtualHost>

tomcat JNDI配置实例

本帖最后由 lqph3387 于 2010-12-14 15:04 编辑

<Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
       <Context path="/" docBase="./" debug="1" reloadable="true">
       <Resource name="jndi-test" auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbcracle:thin192.168.1.210:1521:database" username="username"
        password="password" maxActive="100" maxIdle="10" maxWait="600" />    </Context>
        <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" directory="logs" prefix="localhost_access." suffix=".log"
        pattern="combined" resolveHosts="false"/>
      </Host>

jboss的安装

本帖最后由 lqph3387 于 2011-1-5 13:59 编辑

一,在jboss的官方http://www.jboss.com/下载jboss相应的版本,本文下载的版本是jboss-5.0.0.GA-jdk6.zip,然后上传至/usr/local/src目录
[root@host1 ~]# cd /usr/local/src
[root@host1 src]# unzip jboss-5.0.0.GA-jdk6.zip
[root@host1 src]# mv jboss-5.0.0.GA /usr/local/jboss

二,设置jboss的环境变量
[root@host1 src]#vim /etc/profile
在PATH的末尾追加jboss的bin目录,如:PATH=$PATH:/opt/jdk1.6.0_15/bin:/opt/jdk1.6.0_15/jre/bin::/usr/local/jboss/bin

三,启动并测试
[root@host1 src]# run.sh -b 192.168.12.1
[root@host1 jbossweb.sar]# ps aux |grep jboss
root     24938  0.0  0.0  63856  1144 ?        S    08:28   0:00 /bin/sh /usr/local/jboss/bin/run.sh -b 192.168.12.1
root     24974  1.1  1.7 1014736 291672 ?      Sl   08:28   1:29 /opt/jdk1.6.0_15//bin/java -Dprogram.name=run.sh -server -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/usr/local/jboss/lib/endorsed -classpath /usr/local/jboss/bin/run.jar:/opt/jdk1.6.0_15//lib/tools.jar org.jboss.Main -b 192.168.12.1
root     25738  0.0  0.0  61176   748 pts/1    S+   10:37   0:00 grep jboss
通过浏览器访问http://192.168.12.1:8080/出现jboss的主页面就安装成功了

四,备注
1,默认启动jbosss,启动的是default主机,与它平行的还有all  minimal  standard  web
2,关闭jboss的命令为 shutdown.sh -s 192.168.12.1
3,后台启动jboss的命令为 nohup run.sh -b 192.168.12.1 >/dev/null &
4,默认的default配置文件为 /usr/local/jboss/server/default/deploy/jbossweb.sar/server.xml
5,默认的default的网站根目录为 /usr/local/jboss/server/default/deploy/ROOT.war
6,通过http://192.168.12.1:8080/status可看出服务器的性能状况,连接状况等

我的httpd-mpm.conf

<IfModule mpm_prefork_module>
    ServerLimit        2000
    StartServers        10
    MinSpareServers       10
    MaxSpareServers      15
    MaxClients          1000
    MaxRequestsPerChild   10000
</IfModule>

<IfModule mpm_worker_module>
    StartServers          3
    MaxClients          600
    MinSpareThreads      50
    MaxSpareThreads      100
    ThreadsPerChild      100
    MaxRequestsPerChild  10000
</IfModule>
其他部分,为默认参数。

如何设置httpd-mpm.conf 的参数呢?

[warn] _default_ VirtualHost overlap on port 80, the first has precedence

启动apache时,出现这个错误。
原因为:在httpd.conf 中配置了多个虚拟主机,配置文件形式为  <VirtualHost *:80>
解决办法  把<VirtualHost *:80> 改为  <VirtualHost *>

虽然没有警告了,但是问题又出来了,多个虚拟主机中只能解析第一个,后边的所有域名都访问到第一个来。解决办法为:
http://mylinux.5d6d.com/thread-491-1-1.html

如何设置httpd-mpm.conf 的参数呢

首先确定apache是使用哪种工作模式,是prefork模式还是worker模式,查看方法
apachectl -l  
查看后显示
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_include.c
  mod_filter.c
  mod_log_config.c
  mod_env.c
  mod_setenvif.c
  prefork.c  
http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_cgi.c
  mod_negotiation.c
  mod_dir.c
  mod_actions.c
  mod_alias.c
  mod_so.c

看到红色加粗部分,显示 prefork ,所以是prefork模式。

那么httpd-mpm.conf 中就该配置 # prefork MPM 部分了,prefork模式的默认配置是:
<IfModule mpm_prefork_module>
                StartServers                      5
                MinSpareServers                   5
                MaxSpareServers                  10
                MaxClients                      150
                MaxRequestsPerChild               0
</IfModule>

如何去评估这些参数呢?先来看看各个参数的含义。

apache 设置图片等静态文件的过期时间

httpd.conf 中加入

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>

注释:
Expires 语法如下:
ExpiresByType type/encoding "<base> [plus] <num> <type>}*"

其中<base>是下列之一:
access
now (等价于'access')
modification

plus关键字是可选的。

<num>必须是整数,

<type>是下列之一:
years
months
weeks
days
hours
minutes
seconds


参考: http://apache.chinahtml.com/mod/mod_expires.html

apache如何在虚拟主机中实现用户验证

虚拟主机配置文件中,需要加入
<Directory /data/web/test>
   AllowOverride AuthConfig
</Directory>

然后在虚拟主机的主目录,即DocumentRoot  目录下
vi   /data/web/test/.htaccess

加入
AuthName "frank share web"
AuthType Basic
AuthUserFile /data/web/test/.htpasswd
require valid-user

保存后,然后
创建apache的验证用户

htpasswd -c /data/web/test/.htpasswd  test
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数

如果你想修改密码,可以如下

htpasswd -m .htpasswd test2

重启apache,即可。

到此,你已经配置完成。下面介绍另一种方式:
##################################
vi   http.conf
在相应的虚拟主机配置文件段,加入
<Directory >
            AllowOverride AuthConfig
            AuthName "自定义的"
            AuthType Basic
            AuthUserFile /data/.htpasswd    // 这个目录你可以随便写一个,没有限制
        require valid-user
</Directory>

保存后,然后
创建apache的验证用户

htpasswd -c /data/.htpasswd  test