paulwong

#

在LINUX下配置JBOSS

  1. bin/run.sh
    export LANG=zh_CN.GB18030 //使用中文
    JBOSSCONF
    ="default" //SERVER中使用default
  2. bin/run.conf
    配置JAVA_OPTS
    if [ "x$JAVA_OPTS" = "x" ]; then
       JAVA_OPTS
    ="-Xms512m -Xmx2048m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -Djava.awt.headless=true "
       JAVA_OPTS
    ="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    #   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djboss.platform.mbeanserver -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
       JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=10.0.122.132"
    fi
  3. /opt/jboss4.3/jboss-as/server/default/deploy/jboss-web.deployer
    改端口和绑定监听所有的IP
        <Connector port="80" address="0.0.0.0"    
             maxThreads
    ="250" maxHttpHeaderSize="8192"
             emptySessionPath
    ="true" protocol="HTTP/1.1"
             enableLookups
    ="false" redirectPort="8443" acceptCount="100"
             connectionTimeout
    ="20000" disableUploadTimeout="true"
        compressableMimeType
    ="text/html,text/xml,text/plain,text/css,text/javascript,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml" />
  4. /opt/jboss4.3/jboss-as/server/default/conf/
    配置LOG4J
       <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
          
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          
    <param name="File" value="${jboss.server.log.dir}/server.log"/>
          
    <param name="Append" value="true"/>
          
    <param name="Threshold" value="ERROR"/>

          
    <!-- Rollover at midnight each day -->
          
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>

          
    <!-- Rollover at the top of each hour
          <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
          
    -->

          
    <layout class="org.apache.log4j.PatternLayout">
             
    <!-- The default pattern: Date Priority [Category] Message\n -->
             
    <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

             
    <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n 
             <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
        
    -->
          
    </layout>
       
    </appender>
  5. /etc/profile
    配置JAVA_HOME等,改完后source /etc/profile,使配置生效
    JAVA_HOME=/usr/java/jdk1.6.0_29
    JRE_HOME
    =/usr/java/jdk1.6.0_29/jre
    PATH
    =$JAVA_HOME/bin:JRE_HOME/bin:$PATH 
    CLASSPATH
    =.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib 
    export JAVA_HOME JRE_HOME PATH CLASSPATH 
  6. 相关LINUX命令
    # cd /usr/local/jboss-4.2.3.GA/bin 
    #./run.sh //jboss的启动
    #tail -f nohup.out //查看启动信息
    #./shutdown.sh -S //jboss的停止
    #ps -ef |grep java //查看jboss的运行状态
    #kill -9 后加PID //杀进程
    #netstat -ntpl //查看端口
    #iptables -F //清除所有防火墙限制

posted @ 2011-10-28 10:18 paulwong 阅读(1497) | 评论 (0)编辑 收藏

开放 linux 防火墙 端口

想搭个服务器,但外面访问不到,是防火墙的原因,把端口设置一下就行。

1.在/etc/sysconfig/iptables里添加
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -ACCEPT

2.重启iptables
[root@localhost ~]# /etc/init.d/iptables restart

3.看下状态
[root@localhost ~]# /etc/init.d/iptables status

posted @ 2011-10-27 10:15 paulwong 阅读(176) | 评论 (0)编辑 收藏

JDK线程查看工具

JDK和LINUX提供的查看当前运行的线程的工具: 
  1. KILL
    kill -3 [pid]:线程相关信息会列在Console上
  2. JSTACK
    jstack [pid]:查看线程运行状况,如等锁,运行等
  3. JCONSOLE
    jconsole -pluginpath [JTop.jar]:增加一个JTOP的标签,可查看所有线程
    TthreadXMBean:在JCONSOLE中访问此BEAN即可

posted @ 2011-10-27 00:04 paulwong 阅读(1363) | 评论 (0)编辑 收藏

JDK内存管理工具比较

JDK自带了不少查看和管理内存的工具:
  1. JMAP
    jmap -heap [pid] : 文字形式查看JVM中堆内存,非堆内存等大小情况
    jmap -histo [pid] : 文字形式查看各种类占内存大小情况,但粒度只去到[C这种
    jmap -dump:format=b,file=文件名 [pid] : DUMP出内存快照,给其他工具分析内存提供依据
  2. JHAT
    jhat -J-Xms1024M 文件名:分析DUMP文件,并将结果以http://ip:7000向外提供,可具体到哪些对象
  3. MAT
    由于jhat分析大文件时速度慢,因此引入Eclipse Memory Analyzer,速度和功能强很多
  4. JSTAT
    jstat -gcutil [pid]:查看FULL GC的次数和消耗时间,统计
  5. JCONSOLE
    以图形方式查看内存、线程、类、MBEAN等信息
  6. JVISUALVM
    是JCONSOLE的升级版,可查看内存、线程、各对象占内存的大小,JMAP/JHAT能做的都可以做到

能用图形查看的就用图形方式查看,不能的就用文字形式代替。

posted @ 2011-10-26 23:51 paulwong 阅读(923) | 评论 (0)编辑 收藏

配置远程JCONSOLE

JDK自带工具JCONSOLE,可以以图形界面远程监控JVM的情况,也可作相应的一些操作。
1、修改Tomcat的启动语句,将bin/catalina.sh文件vi编辑:
将原
JAVA_OPTS="-Xmx1024M -Xms512M -Xss3M"
export JAVA_OPTS
调整为
JAVA_OPTS="-Xmx1024M -Xms512M -Xss3M -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
export JAVA_OPTS
如果是JBOSS,还需加这一行
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=10.0.122.132",如果不加就连不上

检查LINUX环境:
运行:hostname -i,如果返回127.0.0.1,则要改/etc/sysconfig/network里的HOSTNAME为NEWHOST,再在/etc/hosts里增加一行本机IP对应NEWHOST的值。
清除防火墙的所有东西:iptables -F!!
参考:http://dikar.iteye.com/blog/534109

2、修改jmx配置文件
目录切换至JAVA_HOME所在目录
/jre/lib/management下,
a、将jmxremote.access、jmxremote.password.template权限调整为读写;
chmod 600 jmxremote.password.template
chmod 600 jmxremote.access
b、jmxremote.password.template文件重命名
mv jmxremote.password.template jmxremote.password
c、vi jmxremote.password
去掉
# monitorRole QED
# controlRole R&D
的#号(Solaris下可编辑模式下,可以使用x删除光标标记处字符)
:wq 保存操作
3、启动Tomcat
./catalina.sh run

4、查看JMX启动情况
netstat -a | grep -i 9999 查看端口占有情况
如机器9999端口被其他程序占用,可调整端口-Dcom.sun.management.jmxremote.port=????

5、客户端机器可通过jconsole或visualvm对其进行监控
使用JMX方式,输入url 用户名(controlRole)、密码(R&D)即可访问
url:远程主机IP:9999
用户名及密码(参考jmxremote.password文件) monitorRole只能读,controlRole能读写

配置中的安全原因出错,由于密码是以明文的方式保存在:jmxremote.password中,所以对此文件只能有所有者都读取,其他人都不能读取。WINDOWS下的设置情况见:http://1985wanggang.blog.163.com/blog/static/77638332010731101726156/

JCONSOLE使用手册:
1.5:http://blog.sina.com.cn/s/blog_5dc29fcc0100xiex.html
1.6:http://hornetblog.sinaapp.com/?p=5

posted @ 2011-10-26 22:31 paulwong 阅读(2231) | 评论 (0)编辑 收藏

JVM参数调优

JVM中用来放NEW出来的对象的内存叫堆内存,用来放CLASS等静态的对象的内存叫非堆内存,如果不加指定,默认情况下就几十兆。当遇上一些饭量大的家伙,如POI,导出上万条数据时,就会报内存溢出。所以在生产环境要指定这些内存的大小。

-server
一定要作为第一个参数,会使JVM启动速度变慢,但会显著提升JVM性能

-Xms<size>
设置初始化时堆内存大小,有多大就设多大。设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx<size>
设置堆内存最大值,有多大就设多大

-XX:PermSize=300M
设置初始化时非堆内存大小,一般为总内存的1/8

-XX:MaxPermSize=300M 
设置非堆内存最大值,一般为总内存的1/4

-Xmn2g:设置年轻代大小为2G.整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8.

-Xss128k: 设置每个线程的堆栈大小.JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右.

-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代).设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值.设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

-XX:MaxTenuringThreshold=0: 设置垃圾最大年龄.如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概论.

回收器选择
JVM给了三种选择:串行收集器,并行收集器,并发收集器,但是串行收集器只适用于小数据 量的情况,所以这里的选择主要针对并行收集器和并发收集器.默认 情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数.JDK5.0以后,JVM会根据当前系统配置进行判断.
吞吐量优先的并行收集器
如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等.
典型配置:

-XX:+UseParallelGC
选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.

-XX:ParallelGCThreads=20
配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收.此值最好配置与处理器数目相等.

-XX:+UseParallelOldGC
配置年老代垃圾收集方式为并行收集.JDK6.0支持对年老代并行收集.

-XX:MaxGCPauseMillis=100
设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.

-XX:+UseAdaptiveSizePolicy
设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开.

参考资料


Tomcat – Java.Lang.OutOfMemoryError: PermGen Space
http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/


实例讲解JVM参数调优的八条经验
http://developer.51cto.com/art/200907/134761.htm

posted @ 2011-10-25 20:43 paulwong 阅读(395) | 评论 (0)编辑 收藏

对象池

     摘要: 如果一个B/S的应用,并发量在2000以上时,新建的对象累积会占用大量内存,当超过一定数量的时候,会报内存不够,使用享元模式就可以解决这一问题,也就是建立对象池。现在的方案可以使用Apache Commons Pool。一、基本String对象测试 Code highlighting produced by Actipro CodeHighlighter (freeware) htt...  阅读全文

posted @ 2011-10-23 17:02 paulwong 阅读(356) | 评论 (0)编辑 收藏

T60升级内存的问题

最近T60使用ECLIPSE时老报内存不够,机器原本用的是2G的内存,因此打算升级内存,看了网上的各种文章,决定采用直接换成2根2G,组成4G的内存使用,由于之前说法,32位的操作系统只能认3G的内存,有1G是没用上的,结果也是这样,但说装上RAMDISK后,可以将那1G内存转成内存硬盘,给虚拟内存用,因此也不会浪费,结果试了N多次,虚拟硬盘用的内存不是额外的那1G,最后查资料,结论如下:如果要他显示4G要满足如下条件:

1. 要在PC中使用超过4GB的内存,需要同时满足以下若干条件
(1)主板配置有支持至少8GB内存寻址的芯片组(例如Intel P965/P975)
(2)CPU支持X64指令集(例如Intel Core2处理器)
(3)BIOS支持memory remapping
(4)使用64bit的操作系统(或支持物理内存扩展技术的32bit操作系统)

2. Intel 945芯片组或更早期的芯片组,受到32bit的限制,最大只能寻址到4GB,也就是说只能访问4GB以内的地址。但是这4GB地址并不是完全留给内存使用的,与此同时,各种接口、IO设备都还需要分配大量的寻址空间(例如显卡通常就要占用数百MB),所以最后留给系统物理内存这一硬件的寻址空间,就只剩下3GB多一些。而操作系统也只能识别到这么多的物理内存。因此,如果PC系统的硬件达不到以上第一点中的(1)(2)(3)条时,即使在系统中安装超过4GB的内存,能够被识别的物理内存也只有4GB,而留给操作系统使用的只有3GB多一些。

3. 操作系统对识别的内存数也有影响。32bit的操作系统只具备4GB的寻址能力,即使硬件满足上述使用4GB内存的条件,限于操作系统的寻址空间限制,必须要保留数百MB的寻址空间给各种接口和IO设备,因此操作系统仍然最多只可以用到3GB多一些的物理内存。而64bit的操作系统下,因为把各种接口和IO设备所占用的地址空间移到更靠后的地址段,因此4GB物理内存可以完全寻址,也就是完全识别使用。再延伸一下,同理可以推断,假设某64bit操作系统的最大寻址能力是8GB,而系统安装了8GB的物理内存,那么操作系统可以识别并使用的内存也就是7GB多一些。

芯片组的问题,浪费了1G内存。

posted @ 2011-10-15 23:49 paulwong 阅读(2818) | 评论 (0)编辑 收藏

HUDSON

http://digitalsonic.iteye.com/blog/610401

posted @ 2011-10-15 01:48 paulwong 阅读(151) | 评论 (0)编辑 收藏

深入浅出JAAS

JAAS:JAVA的认证和权限系统,是JDK级的,并且属于J2EE的规范之一,容器必须要实现的。
作用就要规范外部(对于J2EE程序,外部指浏览器客户端,对于J2SE程序,外部指调用程序)如果要作用JDK里面的东西时的情况。
认证:
  1. 把验证代码写在LOGINMODULE的实现类的login()方法中
  2. 通过配置文件和加JAVA_OTPS的方式告诉JDK类全名
  3. 告诉JDK需要使用认证的地方
    如果是J2SE的程序,在需要认证的地方加上LOGINCONTEXT的login(),JDK会回调上面的login()方法,不通过则抛出excetion,通过则将客户端相关信息保存到SUBJECT中;
    如果是J2EE程序,则在WEB.XML中配置相应元素,容器会回调上面的login()方法,如果不通过则导到登录页面,通过则将客户端相关信息保存到SUBJECT中
验证权限:
  1. 写好权限策略内容:以PRINCALS为单位,列出这个PRINCALS能做的事:PERMISSION子类列表,PERMISSION子类实现了要保护的对象,关键识别参数,操作保护方法,保存为策略文件
  2. 把涉及到保护对象操作的代码放到PrivilegedAction实现类的run()方法内
  3. 通过配置文件和加JAVA_OTPS的方式告诉JDK资源文件全名,策略文件全名和需要启用SECURITY MANAGER 
  4. 在需要验证权限的地方,调用Subject.doAsPrivileged(Subject, PrivilegedAction, null),JDK或容器根据策略文件该SUBJECT是有操作要保护对象的权限,没有则则抛出excetion,有则执行
相关实例可参照http://download.oracle.com/javase/1.4.2/docs/guide/security/jaas/tutorials/GeneralAcnAndAzn.html

 

posted @ 2011-10-06 11:38 paulwong 阅读(346) | 评论 (0)编辑 收藏

仅列出标题
共116页: First 上一页 96 97 98 99 100 101 102 103 104 下一页 Last