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

apache某个虚拟主机不启用gzip

默认情况下,如果apache中调用了mod_deflate ,那么所有虚拟主机都会启用gzip压缩功能。但有时候会遇到某个虚拟主机不想启用gzip的应用,这如何设置呢?
只要在该虚拟主机中加入一下代码即可。    <Location /data/web/example>
            SetOutputFilter DEFLATE
    </Location>
这里的 /data/web/example 为该虚拟主机的主目录。

通过http上传大文件超时的问题

架构是 LAMP , 上传文件的操作,并没有连接mysql,但是却使用了php资源,所以修改设置,不仅要设置apache还要设置php.ini
1.  apache httpd.conf 的设置
Timeout 600  这个可以设置成 3600, 单位是s

2. php.ini 相关的参数
file_uploads  =  on  ; #默认为开
upload_max_filesize  =  1024M  ; #上传最大值
post_max_size = 1024M ; #通过表单POST给PHP的所能接收的最大值

如果还不行,那就修改以下几个参数吧。
max_execution_time = 30000000000 ; #每个php脚本的最大执行时间,秒。改的大大的…
max_input_time = 600000000  ;             #传送请求数据的最大时间,秒。改的大大的…
memory_limit = 5000M ;                           #一个脚本占用内存的上限。这个不建议太大。万一有攻击,你的机器就崩溃了。建议最高256M。

apache的keepalive和keepalivetimeout

在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。     

KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。   

所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。   

如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。   

所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。   

其实,这和MySql的机制有点相似,KeepAlive相当于mysql_connect或mysql_pconnect,KeepAliveTimeOut相当于wait_timeout。   

以下是我的配置: KeepAlive On KeepAliveTimeout 3 考虑到我的网站上有不少的图片,所以将KeepAlive设为On,一般的页面两次请求间隔不会超过3秒,所以这样设置,至尽运行状况良好

转自:http://edu.cnzz.cn/NewsInfo/17275.aspx

apache 的域名重定向

需求:要把访问域名 www.domain1.com 的域名转发到 www.domain2.com 上
实现:
在相关的虚拟主机中增加    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
    </IfModule>
如果是多个域名重定向到一个域名    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain.com[OR]
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
    </IfModule>

httpd.conf文件如何配置KeepAlive

KeepAlive  意思为是否长连接。 后边可以设置 On 或者 Off
简单理解就是这样: 如果设置成On,那么当apache完成用户的请求后,那么apache进程不会断开用户的请求连接,依然保持连接状态。设置成Off则当apache完成用户的请求后,那么apache进程会立即断开和用户的请求连接。
如果,完成用户的连接依然连接,这样的好处是:当该用户的请求在过来时,apache会用这个已经建立的连接,不需要重新创建连接。这样会节省CPU的资源。但是却耗费了内存。为什么呢?可以假设这样的场景。假如keepalive 超时时间为10s,而每1s中有100个用户请求访问,每个用户3次连接,每个连接耗费2M内存,那么10s内建立的连接次数为1000次(跟用户每s请求次数无关),消耗内存为1000*2=2000M,相反,如果不保持长连接,同样的环境场景下,每1s内有100*3个连接,下一秒还是100*3个连接,也就是说永远都是100*3个连接,那么1s内甚至10s内消耗的内存为100*3*2=600M。 然而,在这10s内创建的连接次数为100*3*10=3000次,这样肯定消耗了更多的cpu资源。毕竟每次tcp连接都是需要cpu去处理的。

问题来了,既然知道长连接与否的利与弊,那么如何判定什么时候On,什么时候Off?
在上面的举例中,涉及到了一个数,那就是每个用户在1s内请求的次数,你再回去好好看看,如果把3改为1,是不是10s内得到的连接次数总和是一样的。对!那么这样无论是On还是Off,消耗的CPU资源是一样的。所以,我们考虑3种情况:
  1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
  2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。
  3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。

对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive(连接消耗的内存比较大)

总结一下:
  在内存非常充足的服务器上,不管是否关闭 KeepAlive 功能,服务器性能不会有明显变化;
  如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭 KeepAlive 后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。
    目前的服务器,CPU很强,所以不用考虑频繁的tcp连接对cpu造成的压力,那还让它长连接干什么,故,建议关闭你的长连接吧!!!

PS: 如果,你的服务器上请求量很大,那你最好还是关闭这个参数吧。我试过一次,打开长连接,并且设置超时时间为30s,结果仅仅十几s就把所有的httpd进程跑满。这样很危险的,直接让用户等待,等30s,这不扯淡嘛?即使是你设置成3s,照样会让用户等待3s,这样很不合理的。所以,归根结蒂还是关闭长连接吧,这样效率会更高。