人若无名,便可专心练剑

 tomcat 标签

nginx+tomcat+memcache 集成

  |   0 评论   |   3,271 浏览

环境:


nginx: 192.168.10.111
tomcat1(7.xx):192.168.10.112
tomcat2(7.xx):192.168.10.110 
memcached:192.168.10.112


nginx:用于负载均衡
tomcat1,tomcat2 用于后端应用部署
memcached  用于tomcat1,tomcat2 session同步

一:nginx配置:
location / {
            proxy_pass http://localhost;
 }
 location /status {
     stub_status on;
        access_log off;     
  }
。。。。其他省略。。。。。。
upstream localhost {
        server 192.168.10.110:8080;
        server 192.168.10.112:8080;
}
二:memcached 安装启动
安装,略。。。。(很简单,编译安装)
启动:


memcached -d -m 64 -p 11211 -u root -c 256 -P /var/run/memcached.pid 


(配置参数视自己的服务器而定吧)


三:tomcat配置

tomcat:所需jar包:

tomcat(memecached)配置 
位置:tomcat 安装目录下 conf/context.xml
加入如下配置:
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.10.112:11211"
    sticky="true"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/hy-dp-bgweb"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
两个tomcat 均要进行此项配置:并需要将 相应jar包 拷贝到 tomcat的lib目录

隐藏tomcat 版本信息

  |   0 评论   |   4,011 浏览

1.找到tomcat目录下lib/catalina.jar的文件

2,复制备份,然后新建目录并将catalina.jar复制进去并 解压jar xvf catalina.jar

3,修改 org/apache/catalina/util/ServerInfo.properties

如:

server.info=httpd_server
server.number=1.0
server.built=May 19 2014 11:49:25
以上是修改后的


4,打包 jar cvf catalina.jar  *

5,将新生成的jar包 catalina.jar 替换掉lib下的catalina.jar包,然后服务器重启,这样就能将

   服务器版本信息隐藏


tomcat 控制台乱码

  |   0 评论   |   3,265 浏览
1. 打开文件tomcat/bin/catalina.bat 或者:tomcat/bin/catalina.sh
2. set JAVA_OPTS= 的内容中添加选项-Dfile.encoding=GBK 
        (这里的编码根据自己程序编码相应设置)如:JAVA_OPTS="-Xms2000m -Xmx2000m -XX:PermSize=128m -XX:MaxPermSize=700m -Dfile.encoding=UTF8"
3. 重启tomcat即可

java web压力测试问题故障篇一

  |   0 评论   |   2,645 浏览

这几天一直配合同事进行压力测试,在其中也还是遇到了一些问题,并学习到了一些新的知识,感觉很有必要记录下。

环境:windows server2008 32bit  8G ,jre6,tomcat6.0.39
压力测试工具:loadrunner11
现象一:tomcat配置最大堆内存时,始终不能超过1608m(自己测试出来的,方法如小提示,将其配置到超过这个值时,发现tomcat无法正常启动

错误日志为:

2014-03-11 23:14:23 Commons Daemon procrun stdout initialized 
Error occurred during initialization of VM Could not reserve enough space for object heap
然后网上搜寻了哈相关的资料,这里面涉及到系统位数,jvm内存设置等方面的原因。

小提示:测试电脑的jvm能使用的最大堆内存的方法如:java -Xmx=2048M -version  如果能正常显示版本表明可以支持该大小的堆内存分配

堆内设置网上一般推荐:

-Xms JVM初始化堆大小(总内存 1/64)
-Xmx JVM最大推内存大小(总内存 1/4)
因此该测试服务器内存为8G,按照以上设置的化,那么我的tomcat -Xmx大小应该能设置为2048M,但是设置为2048时,tomcat是不能正常启动的,

具体原因我们可来看看下面这段知识


堆(Heap)和非堆(Non-heap)内存

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

堆内存分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最 大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时, JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。


JVM内存限制(最大值)
首先JVM内存首先受限于实际的最大物理内存,假设物理内存无限 大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是 2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了

因此这下算是明白了,jvm的堆最大堆内存不仅仅受限于我们内存的大小,还跟我们操作系统,以及操作系统版本有直接关系的。


现象二:当压力达到一定程度时,程序出现莫名的空指针异常,tomcat自身日志同时显示:java.lang.OutOfMemoryError: unable to create new native thread

原因:


1,jvm创建的线程数达到了jvm能创建线程数的极限。
2,重新配置-Xmx大小,网上有说该值的大小与Jvm能创建的线程数成反比


解决方法:


1,减小-Xmx值的大小
2,减少单个线程栈的大小,在JVM启动中使用-Xss参数。目前JDK1.4中每个线程栈所大小是256K,1.5是1M.


相关知识点:

所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)

相关链接:1,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6316197

                     2,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6747415

                     3,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8031493

                     4,http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6316197

                    5,  https://blogs.oracle.com/ksrini/entry/hotspot_primordial_thread_jni_stack  有对-Xss配置的说明

                    6, http://docs.oracle.com/cd/E19957-01/817-2180-10/pt_chap5.html 官方jvm 栈内存,等内存配置说明。

                    7,http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_heap_32bit 官方jvm 栈内存,等内存配置说明。