分类: tomcat

  • 使用jconsole远程监控tomcat的性能

    1、修改tomcat的启动文件,在启动文件的CATALINA_OPTS(如果是daemon.sh启动则为JAVA_OPTS)变量中加上以下参数:

    -Djava.rmi.server.hostname=[服务器IP] -Dcom.sun.management.jmxremote.port=[用于监控的端口] -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

    2、打开jconsole,输入服务器的IP和监控端口,账号密码为服务器的登录账号和密码,点连接即可。

  • Tomcat 警告:consider increasing the maximum size of the cache

    tomcat8布署war包,出现如标题的报错,这是因为tomcat8以上对resource采取了cache,而默认的大小是10M。

    解决的办法很简单,就是在context.xml中调大缓存。

    代码如下:

    <Resources cachingAllowed="true" cacheMaxSize="100000" />

    123

  • Tomcat的性能与最大并发(1000)

    当一个进程有 500 个线程在跑的话,那性能已经是很低很低了。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
    当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
    具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
    操作系统对于进程中的线程数有一定的限制:
    Windows 每个进程中的线程数不允许超过 2000
    Linux 每个进程中的线程数不允许超过 1000
    另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。
    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
    Tomcat 默认的 HTTP 实现是采用阻塞式的 Socket 通信,每个请求都需要创建一个线程处理。这种模式下的并发量受到线程数的限制,但对于 Tomcat 来说几乎没有 BUG 存在了。
    Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。但没有阻塞式的成熟。
    这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是非常高的。
    对于单台数据库服务器来说,允许客户端的连接数量是有限制的。
    并发能力问题涉及整个系统架构和业务逻辑。
    系统环境不同,Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。并发量的差异还是满大的。
    maxThreads=”1000″ 最大并发数
    minSpareThreads=”100″///初始化时创建的线程数
    maxSpareThreads=”500″///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
    acceptCount=”700″// 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

    <Connector port="9682" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
    			   minSpareThreads="256" maxSpareThreads="8192" maxThreads="8192" acceptCount="2000"
    			   />

     

  • Redirect apache to tomcat 8 with mod proxy

    I’m trying to redirect Apache Webserver to Tomcat 8 in Ubuntu. Both of them are working properly but I can’t redirect from port 80 in Apache to Tomcat in 8080. My apps work un http://localhost:8080/cmsand myapp. I followed this. I tried also AJP mod but it didn’t work. I used a2enmod: a2enmod proxyand a2enmod proxy_http to enable modules.

    This is my apache2/sites-available/000-default.conf.

    <VirtualHost *:80>
    ProxyRequests off
    ProxyPreserveHost on
    
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    ProxyPass         /myapp  http://localhost:8082/myapp
    ProxyPassReverse  /myapp  http://localhost:8082/myapp
    
    ProxyPass         /cms  http://localhost:8082/cms
    ProxyPassReverse  /cms  http://localhost:8082/cms
    
    </VirtualHost>

    These are my servlet.xml connectors:

       <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Connector port="8082" proxyPort="80"/>
        <Connector port="8009" redirectPort="8443" protocol="AJP/1.3"/>

    Using ProxyPass /cms http://localhost:8080/cms don’t work either.

    Thanks in advance.

  • 关于tomcat使用daemon.sh时输出日志中文乱码的问题解决方法

    修改tomcat下bin目录中的daemon.sh文件,

    原本有一行是这样:

    JAVA_OPTS=

    这行代表tomcat运行时jdk的执行参数为空,我们在后面补充上 “-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8” , 也就是:

    JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

    保存后重新启动tomcat即可解决乱码问题。

  • Ubuntu下配置Tomcat以指定(非root)身份运行

    通常情况下,在配置Tomcat生产环境时,通常会配置Tomcat以特定的身份运行(非root),这样有利于提高安全性,防止网站被黑后的进一步权限提升。

    本文依赖的环境:

    Ubuntu(其实大部分同样适用于CentOS)JVM(安装并已配置好环境变量)gcc、make等编译工具JAVA_HOME=/usr/lib/jvm/jdk1.7.0_55CATALINA_HOME=/usr/local/apache-tomcat-7.0.53运行Tomcat的用户名为tomcat

    首先需要到Apache Tomcat官网下载最新版Tomcat

    Apache Tomcat:http://tomcat.apache.org

    下载好安装包,解压到/home/apache-tomcat-7.0.67下

    # 进入Tomcat安装目录下的bin目录
    cd /home/apache-tomcat-7.0.67/bin
    
    # 解压commons-daemon-native.tar.gz
    tar zxvf commons-daemon-native.tar.gz
    
    cd commons-daemon-1.0.15-native-src/unix
    
    # 这里需要gcc、make等编译工具,如果没有指定JAVA_HOME环境变量,则需要 --with-java= 参数指定jdk目录
    ./configure
    
    # 上一步成功后,make
    make
    
    # make后,会在当前文件夹下生成一个名为 jsvc 的文件,将其复制到$CATALINA_HOME/bin目录
    cp jsvc ../../
    
    # 添加一个用来运行Tomcat的用户
    useradd tomcat -M -d / -s /usr/sbin/nologin
    
    # 回到$CATALINA_HOME/bin目录下
    cd ../../
    
    # 接下来便是修改$CATALINA_HOME/bin目录下的 daemon.sh 文件
    # 设置其中的TOMCAT_USER=tomcat,JAVA_HOME=/usr/java/jdk1.7.0_79
    
    # 如果$CATALINA_HOME/bin下的*.sh文件没有运行权限,则为其添加运行权限
    chmod +x *.sh
    
    # 设置$CATALINE_HOME文件夹及其所有子文件Owner为tomcat
    chown -R tomcat:tomcat /home/apache-tomcat-7.0.67
    
    # 启动Tomcat
    daemon.sh start

    设置Tomcat为Service

    # 创建 $CATALINA_HOME/bin/daemon.sh 的一个链接到 /etc/init.d/ 下,service名为tomcat7
    ln -s /home/apache-tomcat-7.0.67/bin/daemon.sh /etc/init.d/tomcat7
    
    # 启动Tomcat
    /etc/init.d/tomcat7 start
    # 或者
    service tomcat7 start

    设置Tomcat开机自启动 (前提是已经设置Tomcat为Service)

    # 设置开机自启动
    update-rc.d tomcat7 defaults
    
    # 取消开机自启动
    update-rc.d tomcat7 remove
  • 把解压缩版的tomcat6注册成服务并设置自启动

    操作步骤:
    1、在“开始”→“运行”中输入cmd 命令,进入MS-DOS界面
    2、cd 到tomcat的bin目录下
    C:\> cd tomcat/bin
    3、运行命令service install, 就可以把tomcat注册成系统服务了
    c:\tomcat\bin> service install
    运行命令service uninstall,就可以删除服务。
    c:\tomcat\bin> service uninstall

    当然,这样注册出来的服务启动类型是手动的;若想设置为开机自动启动,则需要修改bin目录下的service.bat文件。
    打开此文件,在倒数第三行左右的那句输出
    echo The service ‘%SERVICE_NAME%’ has been installed.
    这句是输出服务安装成功,在这之前加一句
    sc config %SERVICE_NAME% start= auto
    就OK了,以后开机后tomcat服务就自动启动了

    备注:
    启动/停止tomcat服务的命令,如下:
    启动tomcat服务: c:\tomcat> net start tomcat6
    停止tomcat服务: c:\tomcat> net stop tomcat6
    或者
    打开“服务”对话框下进行手动点击“启动”|“停止”按钮来操作。