小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了。。。。

小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存,5M独享带宽。

一、jvm内存优化方案。

要优化服务器,首先从jvm入手,分配好jvm内存,配置方案如下:

declare -x JAVA_OPTS="-server -Xms1280M -Xmx1280M -Xmn512M -Xss1024k -XX:+AggressiveOpts -XX:+UseParallelGC  -XX:+UseBiasedLocking"

其中,-server是让jvm在服务模式下运行,可以提高jvm运行效率,其他的就不用多操心了。

-Xmx是最大内存,如果是32操作系统,2G内存以上,设置为1280G是最优的,设置太大了会造成jvm崩溃,这是32位jvm本身的限制造成的。

-Xmn是最小内存,官方推荐为最大内存的3/8,这里取下整,就521M了

-Xms为初始化内存,直接与最大内存一致,这样可以避免内存重复分配,降低效率,直接上来就是最大的,jvm也不用再扩展内存了,节省时间。

-Xss是每个线程所占用的内存,也就是每个线程的堆栈大小,太小了容易溢出,太大了会导致创建的线程数量减少,因为最大容量是有限的。这里最大内存为1280M,理论上可以创建1000个左右线程,差不多支持500个并发访问(是并发访问哦,也就是500个用户同一时刻点击),已经相当可以了。

-XX:+AggressiveOpts,加快编译。

-XX:+UseParallelGC,优化垃圾回收。

-XX:+UseBiasedLocking,优化锁机制。

将上边这条配置,添加到tomcat安装目录下的\bin\catalina.sh文件中,放在哪个位置无所谓,只要在cygwin=false这句话之前就可以了。

二、tomcat服务器优化方案

搞定了jvm,接下来就要配置tomcat了,配置如下:

1   <Connector port="80" protocol="HTTP/1.1"
2
3 maxHttpHeaderSize="8192"
4
5 maxThreads="1000" minSpareThreads="100" maxSpareThreads="300"
6
7 enableLookups="false" redirectPort="8443" acceptCount="200"
8
9 connectionTimeout="50000" disableUploadTimeout="true"/>

这些配置中,我们关心的有:

maxThreads最大线程数,设为1000可以创建1000个线程,也就是1000个并发事务,大约可以支持500个完全并发访问,这是一个相当恐怖的数字,可以试想一下,500个用户同时点击,是什么概率。

minSpareThreads最小备用线程数,可以理解为,服务器一旦启动,马上创建这么多线程以备使用,因此设置太大了浪费资源,太小了会降低效率,这个就要根据读者的服务器配置和具体的访问量来衡量,不能一概而论,我这里的设置仅仅是个参考,本服务器访问量大约每天几十万pv,并且比较集中。

maxSpareThreads最大备用线程数,创建的线程数量超过这个数量时,如果某些线程空闲,那么这些会被回收,直到线程总数量小于这个值。

acceptCount当tomcat启动的线程数达到最大时,等待的线程数量(注意并没有新线程创建,只是预定了而已)。这个数值也需要根据实际情况设置,如果设置的偏小,会造成很多请求直接被拒绝;如果设置的偏大,会造成很多请求超时,读者理解一下吧!

enableLookups关闭tomcat的dns查询,节省带宽,无需过多了解。

disableUploadTimeout这个标志允许servlet container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间,总之,就是为了保证每次请求都能顺利完成。

将这段话复制到tomcat安装目录下的\conf\server.xml文件中。

注意,这个配置在server.xml中本来就存在,可能要和读者以前的配置融合一下,别直接盲目覆盖。。。

三、MySQL优化方案

Mysql优化,小菜了解到的就是修改最大连接数,因为mysql默认的最大连接数是100,对于稍微大点的项目,肯定是不够的。

项目端配置

最大连接数,首先要在程序里设定,如果您的项目采用的是JNDI方式配置的数据源,那么就要去tomcat安装目录下的\conf\server.xml文件或\conf\context.xml文件里找到如下配置(小菜只是举个例子,里边的配置都是随便写的,关键是找到Resource节点):

 1  <Resource name="demo"
2 auth="Container"
3 type="javax.sql.DataSource"
4 maxActive="500"
5 maxIdle="30"
6 maxWait="5000"
7 username="sa"
8 password=""
9 driverClassName="org.hsqldb.jdbcDriver"
10 url="jdbc:hsqldb:hsql://localhost/runqianDB" />

这里我们需要关注的有:

maxActive是指最大激活连接数为500,也就是说同时最多只可以有500个数据库连接。这里也可以理解为并发,小菜觉得500已经不少啦,毕竟数据读完会自动释放连接,如果您的主机配置不够高,这里设置太多,比如什么3000,可能导致MySQL启动失败。

maxIdle是最大空闲连接数,就算没有使用数据库,依然保持这么多连接,以便需要时直接用,提高效率。因为数据库连接的创建过程相当的耗费时间。参考了很多网站,一般都是30左右,仅供参考!

maxWait是最大等待时间,如果数据库连接数不够用,那么等待这么长时间,超过这个时间了就超时,设为-1表示无限等待。

如果您的项目采用的是JDBC配置,也就是项目中有一个properties文件,一般叫什么JDBC.properties、config.properties,具体叫什么小菜就不知道啦,然后里边会有类似如下配置:

JDBC.DriverClass=com.mysql.jdbc.Driver

JDBC.Url=jdbc\:mysql\://localhost\:3306/xxx?useUnicode\=true&amp;characterEncoding\=utf8

JDBC.User=xxx

JDBC.Password=xxx

JDBC.MaxPoolSize=500

JDBC.MinPoolSize=30

JDBC.WaitTime=5000

这里的MaxPoolSize、MinPoolSize、WaitTime分别和上边讲的maxActive、maxIdle、maxWait对应,但这是小菜的项目,您的项目需要具体分析。。。。

服务器端配置

项目配置好了之后,就要配置MySQL服务器了。

如果您的MySQL是5.0之前的版本,包括5.0,那么可以尝试用如下方法修改MySQL最大连接数。

在linux系统中找到/usr/bin/mysqld_safe编辑它,找到mysqld启动的那两行,在后面加上参数 :

-O max_connections=1000

用红字特别说明:

if test -z "$args"

then

$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking -O max_connections=1000 >> $err_log 2>&1

else

ev al "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking $args -O max_connections=1000 >> $err_log 2>&1"

这段代码很不好找,在下也无法说清楚它具体在哪个位置。不过建议从最后往前找会比较快。

重启mysql服务:# service mysql restart

查看当前最大连接数: mysqladmin -uroot -p variables

如果您的MySQL服务器是5.1之后的版本,包括5.1,或者您用上边的方法不行,那么可以尝试如下方法。

在linux系统中找到/etc/my.cnf文件,在里边的[mysqld]节点下,添加:max_connections=500即可,500就是指最大连接数,可以随意改。例如:

[mysqld]

datadir=/home/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

default-character-set = utf8

default-collation = utf8_general_ci

max_connections=500

这样就搞了,重启MySQL即可。

四、日志优化

日志的重要性不必多说,项目开发时,日志一般是直接输出到控制台上,方便查看。

但是项目实际发布时,就不能这样做了,影响效率不说,我们也无法查看这些日志。

小菜的项目中用的是log4j,它有一个配置文件,叫log4j.properties,配置大致如下:

log4j.rootLogger = INFO, R

log4j.appender.R = org.apache.log4j.RollingFileAppender

log4j.appender.R.File = /home/westjavatest/logs/ivlifelog4j.txt

log4j.appender.R.MaxFileSize = 500KB

log4j.appender.R.MaxBackupIndex = 1

log4j.appender.R.layout = org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

这里我们需要的关注的有:

log4j.rootLogger = INFO, R,这里的INFO指明了日志的级别,一般用INFO就可以了;R是输出配置,名字随便起,和下边log4j.appender.R对应就可以了。

log4j.appender.R.File指明了日志输出路径,注意linux下目录的/和windows下目录的\相反哦。

log4j.appender.R.MaxFileSize是指每个日志文件的大小,这里设成了不超过500kb,一旦超过,会重新创建一个.txt日志文件。

其他参数就不那么重要了,有兴趣的读者可以自己去谷歌一下~

五、结束语

这些服务器的优化配置,小菜也是第一次接触,花了很多时间从网上搜集而来的,因此整理一下,方便像小菜这样的菜鸟。

这些配置,很多都是经验数据,具体的参数需要根据您服务器的实际情况,进行一定的综合分析、压力测试之后,才得到的,小菜列举的这些只是一般经验,仅供参考。

最后祝愿大家优化顺利!

Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]的更多相关文章

  1. Linux下Ganglia集群监控安装、配置笔记

    http://www.blogjava.net/henry14/archive/2011/12/17/ganglia.html 枪声依旧 Linux下Ganglia集群监控安装.配置笔记 Gangli ...

  2. Linux下jvm、tomcat、mysql、log4j优化配置笔记

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  3. linux 下 jdk+tomcat+mysql 的 jsp 环境搭建

    JDK 在 linux 下安装 1.          把安装文件放在 /opt 下,并执行 [root@localhost opt]# ./jdk-1_5_0_06-linux-i586.bin 并 ...

  4. Linux下JDK Tomcat MySQL基本环境搭建

    1. 安装JDK wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1 ...

  5. Linux下Nginx+tomcat应用系统性能优化

    软件环境及服务器配置如下: Linux rh6.3,Tomcat7.0.29,Nginx1.2.7 mysql5.1,jdk1.6.0 mysql5.1 memcached 1.4.15 Xeno 2 ...

  6. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  7. Linux下修改tomcat内存

    由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemo ...

  8. 在linux下用tomcat部署java web项目的过程与注意事项(转)

    在linux下用tomcat部署java web项目的过程与注意事项一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/in ...

  9. Linux下yum安装MySQL

    写这篇文章的原因是:在刚开始使用Linux操作系统时想要搭建LAMP环境,于是开始在Google和百度上各种寻找资料,碰到了不是很多的问题后,我决定写这篇文章总结一下在Linux下yum安装MySQL ...

随机推荐

  1. a href="#"与a href="####"的区别是什么

    前提是 :有滚动条. [感谢  黎明就在眼前 博客园园友] '#' 是有特殊意义,如果 '#' 后有内容会被认为是一个标签而从页面找到相应标签跳转到该处,找不到时会跳到页首,通常情况下使用“#ID”来 ...

  2. 【web安全】第四弹:防火墙技术笔记

    参考资料: <黑客攻防演习>第二版   Ed SKoudis  Tom Liston著 <防火墙.入侵检测与VPN> 马春光 郭方方著 OSI在理论上将网络分为七层,物理层.数 ...

  3. C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

    一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient ma ...

  4. [原博客] POJ 2425 A Chess Game

    题目链接题意:给定一个有向无环图(DAG),上面放有一些旗子,旗子可以重合,两个人轮流操作,每次可以把一个旗子从一个位置移动到相邻的位置,无法移动时输,询问先手是否必胜. 这道题可以把每个旗子看作单独 ...

  5. android中viewPager+fragment实现的屏幕左右切换(进阶篇)

    Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等.可以看做是一个子Activity. 先看一下布局: 1 <LinearLayout xmlns:a ...

  6. http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

  7. 在VS2008中配置WDK7600驱动开发环境

    网上这类资料多如牛毛,也许很多人都是转来转去,却很有人去真正的测试,有时候感觉确实对他人也是一种误导. 这里是我自己在VS2008 + WDK7600.16385.0 + DDKWizard配置自己的 ...

  8. Win7资源管理器已停止工作——StackHash_6c37,R6205错误

      2013-9-20 此问题由来已久,截图及"问题签名"如下: 问题签名: 问题事件名称: BEX64 应用程序名: Explorer.EXE 应用程序版本: 6.1.7601. ...

  9. WebService开发应用

    WebService是运行于服务端(一般放在信息服务器上的)让客户端来调用的. 以下开发两个简单的实例 1.自己开发服务端自己调用(vs2010) 1).菜单:“新建-项目”,在打开的窗体中选择,如下 ...

  10. C#程序集使用强名字(Strong Name)签名/强名称签名

    强名称签名的方法: 强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的 ...