linux环境配置
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path ="/huabao" docBase ="/home/wwwroot/huabao" debug ="0" privileged ="true" reloadable ="false"/>
</Host>
前提:安装ssh服务
必备工具:
(1)xshell
(2)xftp
安装位置:
一般安装在/usr/下面
安装环境:
1. 获取jdk 1.7安装包
JDK 1.7 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
下载请注意操作系统版本,linux下分x86、x64两种;
以及注意安装包是rpm还是tar.gz格式的。rpm是redhat package是红帽的标准安装包,有些Linux系统是不支持的。rpm安装时会自动配置,一般都是lib安装到/urs/bin, bin安装到/usr/bin下面,如果没有安装到/urs/bin下,也会在该目录下建立一个软连接。rpm包跟tar.gz包都一致
2. 检查linux系统上是否存在其它版本的JDK,如果有则先卸载旧版本的JKD。
# java -version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-51)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
查看自带的JDK的相关信息
# rpm -qa | grep java
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
卸载自带的JDK的信息
# rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
3. 解压安装JDK
rpm包安装
# chmod +x jdk-7u25-linux-x64.rpm
# rpm -ivh jdk-7u25-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
tar包安装
# mkdir /usr/java //新建文件夹/usr/java/
# tar xzvf jdk-7u25-linux-x64.tar.gz -C /usr/java/
4. 配置环境变量,在etc/profile文件中添加
# vim /etc/profile //添加以下内容
export JAVA_HOME=/usr/java/jdk1.7.0_25
export CLASSPATH=/usr/java/jdk1.7.0_25/lib
export PATH=$JAVA_HOME/bin:$PATH
# source /etc/profile //用命令source /etc/profile使配置文件立即生效。否则只能重启系统才能使配置参数生效
5. 验证环境变量是否生效
# echo $JAVA_HOME
/usr/java/jdk1.7.0_25
# echo $PATH
/usr/java/jdk1.7.0_25/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
# echo $CLASSPATH
/usr/java/jdk1.7.0_25/lib
6. 验证安装成功与否,以及环境变量是否生效
# java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
7. 删除tmp目录下JDK安装包
MySQL在Linux Ubuntu中安装
本文使用的Linux是Ubuntu 12.04.2 LTS 64bit的系统,安装MySQL数据库软件包可以通过apt-get实现。
在Linux Ubuntu中安装MySQL数据库
#安装MySQL服务器端
~ sudo apt-get install mysql-server
安装过程会弹出提示框,输入root用户的密码,我在这里设置密码为mysql。
安装完成后,MySQL服务器会自动启动,我们检查MySQL服务器程序
# 检查MySQL服务器系统进程
~ ps -aux|grep mysql
mysql 3205 2.0 0.5 549896 44092 ? Ssl 20:10 0:00 /usr/sbin/mysqld
conan 3360 0.0 0.0 11064 928 pts/0 S+ 20:10 0:00 grep --color=auto mysql
# 检查MySQL服务器占用端口
~ netstat -nlt|grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
# 通过启动命令检查MySQL服务器状态
~ sudo /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 3205
# 通过系统服务命令检查MySQL服务器状态
~ service mysql status
mysql start/running, process 3205
3. 通过命令行客户端访问MySQL
安装MySQL服务器,会自动地一起安装MySQL命令行客户端程序。
在本机输入mysql命令就可以启动,客户端程序访问MySQL服务器。
~ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql>
使用户名和密码,登陆服务器
~ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql>
MySQL的一些简单的命令操作。
# 查看所有的数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
# 切换到information_schema库
mysql> use information_schema
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 查看information_schema库中所有的表
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| INNODB_BUFFER_PAGE |
| INNODB_TRX |
| INNODB_BUFFER_POOL_STATS |
| INNODB_LOCK_WAITS |
| INNODB_CMPMEM |
| INNODB_CMP |
| INNODB_LOCKS |
| INNODB_CMPMEM_RESET |
| INNODB_CMP_RESET |
| INNODB_BUFFER_PAGE_LRU |
+---------------------------------------+
40 rows in set (0.01 sec)
# 查看数据库的字符集编码
mysql> show variables like ‘%char%‘;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
4. 修改MySQL服务器的配置
接下来,我需要做一些配置,让MySQL符合基本的开发要求。
4.1 将字符编码设置为UTF-8
默认情况下,MySQL的字符集是latin1,因此在存储中文的时候,会出现乱码的情况,所以我们需要把字符集统一改成UTF-8。
用vi打开MySQL服务器的配置文件my.cnf
~ sudo vi /etc/mysql/my.cnf
#在[client]标签下,增加客户端的字符编码
[client]
default-character-set=utf8
#在[mysqld]标签下,增加服务器端的字符编码
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
4.2 让MySQL服务器被远程访问
默认情况下,MySQL服务器不允许远程访问,只允许本机访问,所以我们需要设置打开远程访问的功能。
用vi打开MySQL服务器的配置文件my.cnf
~ sudo vi /etc/mysql/my.cnf
#注释bind-address
#bind-address = 127.0.0.1
修改后,重启MySQL服务器。
~ sudo /etc/init.d/mysql restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop mysql ; start mysql. The restart(8) utility is also available.
mysql start/running, process 3577
重新登陆服务器
~ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
# 再次查看字符串编码
mysql> show variables like ‘%char%‘;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
我们检查MySQL的网络监听端口
# 检查MySQL服务器占用端口
~ netstat -nlt|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
我们看到从之间的网络监听从 127.0.0.1:3306 变成 0 0.0.0.0:3306,表示MySQL已经允许远程登陆访问。通过root账号远程访问,是非常不安全的操作,因此我们下一步,将新建一个数据库,再新建一个用户进行远程访问。
5. 新建数据库并设置访问账号
通过root账号登陆MySQl服务器
~ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
# 新建数据库abc
mysql> CREATE DATABASE abc;
# 使用数据库abc
mysql> use abc;
Database changed
# 在数据库abc中,新建一张表a1
mysql> create table a1(id int primary key,name varchar(32) not null);
Query OK, 0 rows affected (0.05 sec)
# 新建book用户,密码为book,允许book可以远程访问abc数据库,授权book对abc进行所有数据库
mysql> GRANT ALL ON abc.* to book@‘%‘ IDENTIFIED BY ‘book‘;
Query OK, 0 rows affected (0.00 sec)
#允许book可以本地访问abc数据库,授权book对abc进行所有数据库
mysql> GRANT ALL ON abc.* to book@localhost IDENTIFIED BY ‘book‘;
Query OK, 0 rows affected (0.00 sec)
我们在本地使用book用户登陆
# 使用book用户登陆
~ mysql -ubook -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
#进行abc数据库
mysql> use abc;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#查看abc数据库的表
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| a1 |
+---------------+
1 row in set (0.00 sec)
我们在远程的另一台Linux使用book用户登陆
~ mysql -ubook -p -h 192.168.1.199
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> use abc
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| a1 |
+---------------+
1 row in set (0.00 sec)
5. 改变数据存储位置
有时候我们可能还需要改变MySQL数据存储的位置,一种方法是直接修改配置文件 /etc/mysql/my.cnf,找到datadir属性修改目录。
~ vi /etc/mysql/my.cnf
[mysqld]
datadir = /var/lib/mysql
如果通过这种方法修改,那么其他的调用存储路径的地方,我们也都需要进行修改,比如 用到了/usr/bin/mysql_install_db 命令,文件中ldata的属性也需要修改,关于mysql_install_db 命令的使用可以参考文章,[MySQL优化]为MySQL数据文件ibdata1瘦身。
还有另一种修改存储位置的方法,就是通过Linux系统的软连(ln -s)接来做的。当我们新挂载一块硬盘,停止MySQL服务,然后把/var/lib/mysql目录移动到新的硬盘存储,在/var/lib/mysql处建立指定新位置的软连接就行了。
# 停止MySQL服务器
~ /etc/init.d/mysql stop
# 挂载硬盘
~ mount -t ext4 /dev/vdb1 /vdb1
# 建立新存储目录
~ mkdir /vdb1/data
# 移动MySQL数据目录到新目录
~ mv /var/lib/mysql /vdb1/data/
# 软连接
~ ln -s /vdb1/data/mysql /var/lib/mysql
修改apparmor的别名定义文件
~ vi /etc/apparmor.d/tunables/alias
alias /var/lib/mysql/ -> /vdb1/data/mysql/,
注:如果没有修改apparmor的配置,MySQL会启动不了,并一直提示是权限的问题。
# 重启apparmor服务
~ /etc/init.d/apparmor restart
# 重启MySQL服务器
~ /etc/init.d/mysql start
这样就完成了,MySQL数据存储位置修改。
通过上面的操作,我们就把MySQL数据库服务器,在Linux Ubuntu中的系统安装完成。
下载 Tomcat 安装包
wget http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.47/bin/apache-tomcat-7.0.47.tar.gz
2) 安装 Tomcat
tar -zxf apache-tomcat-7.0.47.tar.gz
ln -s /opt/apache-tomcat-7.0.47 tomcat
3) 启动 Tomcat
cd /opt/tomcat
./bin/startup.sh
查看控制台:
tail -f logs/catalina.out
关闭 Tomcat:
./bin/shutdown.sh
或
ps –f | grep tomcat
kill -9 <pid>
4) 访问 Tomcat 首页
http://<host>:8080/
其中,host 是 Ubuntu 的 IP 地址,默认端口号是 8080,后续可自行设定。
root@ubuntu:~# mkdir /usr/tomcat
root@ubuntu:~# tar apache-tomcat-7.0.47.tar.gz -C /usr/tomcat/
tar: invalid option -- ‘e‘
Try `tar --help‘ or `tar --usage‘ for more information.
root@ubuntu:~# cd /home/software
root@ubuntu:/home/software# ls
root@ubuntu:/home/software# tar -zxf apache-tomcat-7.0.47.tar.gz -C /usr/tomcat/
root@ubuntu:/home/software# cd
root@ubuntu:~# cd /usr/tomcat/apache-tomcat-7.0.47
root@ubuntu:/usr/tomcat/apache-tomcat-7.0.47# ./binstartup.sh
tomcat/bin/setenv.sh 用于tomcat启动的参数配置(当前目录下,会在tomcat启动时自动调用)
cat tomcat/bin/catalina.sh
if [ -r "$SETENVPATH/bin/setenv.sh" ]; then
. "$SETENVPATH/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
cat tomcat/bin/setenv.sh
#!/bin/sh
export CATALINA_OPTS="-Xmx350M -Xms350M -XX:PermSize=64M -XX:MaxPermSize=64m -XX:+UseParallelGC -Dlog4j.configuration=file:///home/www/config/java/scheduler_log4j.xml"
export CATALINA_PID="$CATALINA_BASE/logs/catalina.pid"
............
--------------------------------------------------------------------------
1、Apache Tomcat6 中支持了Java语言的特性 NIO( New I/O),使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。但是,在tomcat6在默认的配置选项中是没有把NIO功能打开。在tomcat的配置文件conf/server.xml中,找到以下配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在控制台的启动信息里看见,默认状态下 没有被打开nio配置,启动时的信息,如下:
2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2010-2-1 12:59:40 org.apache.catalina.startup.Catalina load
修改成支持NIO的类型,配置如下 :
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol "
connectionTimeout="20000"
redirectPort="8443" />
进行测试,被打开nio配置,启动时的信息,如下:
2010-2-1 13:01:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
2010-2-1 13:01:01 org.apache.coyote.http11.Http11NioProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2、JAVA虚拟机性能优化
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。可以根据自己的需要选择不同的操作系统和对应的JDK版本(只要是符合Sun发布的Java规范的),推荐使用Sun公司发布的JDK。确保所使用的版本是最新的,因为Sun公司和其它一些公司一直在为提高性能而对java虚拟机做一些升级改进。一些报告显示JDK1.4在性能上比JDK1.3提高了将近10%到20%。
可以给Java虚拟机设置使用的内存,但是如果选择不对的话,虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。
-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。一般建议堆的最大值设置为可用内存的最大值的80%,并将-Xms和-Xmx选项设置为相同。
堆内存分配
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以上的处理器就不会有限制了。
JAVA_OPTS="-server -Xms2048M -Xmx2048M -Xss256k -XX:+AggressiveOpts -XX:+UseParallelGC-XX:+UseBiasedLocking"
配置示例:JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=256M -XX:MaxNewSize=256M"
JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx2048M -Xss128K"
修改apache-tomcat-6.0.18\bin\catalina.bat(catalina.sh)配置文件为以下:
set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m
这一句加在
rem ---------------------------------------------------------------------------
与
rem Guess CATALINA_HOME if not defined
之间的位置,不要加到那些if里面去了,否则不一定会生效。
3、停用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。
DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。
修改server.xml文件中的enableLookups参数值: enableLookups="false"
<Connector
port="8887" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
加上enableLookups="false";这样就不使用DNS查询,也不会有延迟了。除非需要所有连接到服务器的HTTP客户端的完整主机名称。
注:Connector的enableLookups性属的意义是:调用request.getRemoteHost()是否会通过DNS查询来取得远处客户端的真正主机名称。true表示会查询,false表示以字符串格式传回客户端的IP地址。默认值是:true。
4、调整线程的数目
通过应用程序的连接器(Connector)进行性能控制的的参数是创建的处理请求的线程数。
Tomcat使用线程池加速响应速度来处理请求。在Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
示例如下:
<Connector port="80" protocol="HTTP/1.1"
maxThreads="600" 最多运行线程数,默认值为200
minSpareThreads="100" 初始化创建的线程数
maxSpareThreads="500"最多能创建的线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要socket线程.
acceptCount="700" 指定当所有可以使用的处理请求的线程数都被使用时可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认值为100
connectionTimeout="20000"
enableLookups="false"
redirectPort="8443" />
5、Tomcat6线程池(Executor Thread pool)的配置
第一步,打开共享的线程池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>
name 这个是线程池的名字,必须唯一,后面的配置里要用到这个东西
namePrefix 线程的名字前缀,用来标记线程名字,每个线程就用这个前缀加上线程编号了,比如
catalina-exec-1
catalina-exec-2
maxThreads 允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,只是限制而已,不占用资源。
minSpareThreads 最小的保持活跃的线程数量,默认是25.
要根据负载情况自行调整了:太小影响反应速度,太大占用资源。
maxIdleTime 超过最小活跃线程数量的线程,空闲时间超过这个设置后,会被关闭,默认是1分钟。
threadPriority 线程的等级。默认是Thread.NORM_PRIORITY
第二步 在Connector里指定使用共享线程池
<Connector port="8009" ... maxThreads="5000" executor="tomcatThreadPool" ... />
注意,一旦使用了线程池,则其它的线程属性,比如 maxThreads等将被忽略
6.在tomcat中设置session过期时间
在\conf\web.xml中通过参数指定:
<session-config>
<session-timeout>180</session-timeout>
</session-config> 单位为分钟。
tomcat容器调优详参:
vim $CATALINA_HOME/conf/server.xml
...
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
acceptCount="500" maxThreads="300"
useURIValidationHack="false"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443"
/>
...
【注释】
URIEncoding:URI编码,这里参数是UTF-8,很容易理解,即支持中文域名
minSpareThreads:最小空闲线程,即tomcat可以保留的最小线程
maxSpareThreads:最大空闲进程,如果超出这个参数,则会被回收
(这两个参数根据实际环境而定,如果每天都有一个并发爆发期,则最好min设置的大一些)
enableLookups:是否开启域名解析,这个一般都禁止,域名解析影响性能
disableUploadTimeout:
connectionTimeout:连接超时时间,单位是ms,根据程序性能决定
maxThreads:同一时刻可以接收的最大请求,即并发量
acceptCount:若超出maxThreads,则超出部分不能超过此参数值,若超过,则拒绝
useURIValidationHack:设置为false可以减少tomcat对一些url的不必要的检查从而减省开销【不明觉厉】
compression:是否启用压缩,肯定启用了
compressionMinSize:压缩文件大小下限,单位字节
compressableMimeType:压缩文件的Mime类型
redirectPort:重定向(因此若为443https,则8443 connector也应该加入以上参数)
jvm调优
vim $CATALINA_HOME/bin/catalina.sh
...
export JAVA_OPTS="-server -Xms8192M -Xmx8192M -Xmn3072M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=4096M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
...
【注释信息】
jvm调优其实就是在catalina启动时临时加上JAVA_OPTS变量值的。
-server:意思就是将tomcat改为生产模式,这个看网上说明,不加的话,就如同实验环境一样。因此,必加参数
-Xms:jvm最小堆内存
-Xmx:jvm最大堆内存
这两个值的差值叫做保留内存,不过建议最好设置的一样,即最小内存随同最大内存,之所以这么设置是因为,内存回收的时候,也是需要消耗cpu的,如果此时突然并发又来了,而tomcat却在回收内存,那么就不爽了
-Xmn:新生态内存,这个官方建议是jvm堆内存的3/8,堆内存=新生内存+老年内存+持久内存
-Xss:设定每个线程的堆栈大小
-XX:+AggressiveOpts:作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术
-XX:+UseBiasedLocking:启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。
-XX:PermSize:持久态最小内存,默认为物理内存大小的1/64
-XX:MaxPermSize:持久态最大内存,默认为物理内存大小的1/4
-XX:+DisableExplicitGC:在程序代码中不允许有显示的调用”System.gc()”,【不明觉厉】
-XX:MaxTenuringThreshold:设置对象在年轻态停留的时间,时间越长,被回收概率越大,若为0,则直接转到老年态
-XX:+UseConcMarkSweepGC:CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。【不明觉厉】
-XX:+UseParNewGC:年轻代采用多线程并行回收,加速回收
-XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的情况下, 尽量减少 mark 的时间【不明觉厉】
-XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少【不知道啥意思】
-XX:LargePageSizeInBytes:指定 Java heap的分页页面大小
-XX:+UseFastAccessorMethods:get,set 方法转成本地代码【不知道啥意思】
-XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集【不知道啥意思】
-Djava.awt.headless=true":这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在 web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显 示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。【虽然知道结果,就是不知道因在何处】
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。