小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了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了,配置如下:

   <Connector port="80" protocol="HTTP/1.1" 

                maxHttpHeaderSize="8192" 

                maxThreads="1000" minSpareThreads="100" maxSpareThreads="300" 

                enableLookups="false" redirectPort="8443" acceptCount="200" 

                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节点):

  <Resource name="demo"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
maxIdle="30"
maxWait="5000"
username="sa"
password=""
driverClassName="org.hsqldb.jdbcDriver"
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. 使用nssm在windows服务器上部署nodejs

    Linux上,可以轻松的使用forever或者pm2来部署nodejs应用.但是在windows下就麻烦了,pm2明确的说支持Linux & MacOS,forever在windows下貌似问 ...

  2. C++之jsoncpp学习

    最新由于客户端要用到jsoncpp,所以自己也跟着项目的需求学了一下jsoncpp.以前没用过xml,但是感觉接触json后,还蛮好用的. 参考地址 http://jsoncpp.sourceforg ...

  3. 数据库中int类型存在空数据开发过程中model和dal层处理方法

    model层 public Int32? IsFullAttendance { get; set; } dal层  if (dr["IsFullAttendance"] + &qu ...

  4. afterTextChanged() callback being called without the text being actually changed

    afterTextChanged() callback being called without the text being actually changed up vote8down votefa ...

  5. SQL SERVER 修改数据库名称(包括 db.mdf 名称的修改)

    刚开始学习SQL SERVER 2005,弄了一个上午修改数据库名,主要是需要修改db.mdf 和db_log.ldf的名字,总算解决了.在这里记下,以后再要修改了就别忘了. 假设原来数据库名为db, ...

  6. C语言学习笔记(一)_hello world

    一.建立一个文件a.c,写入: #include <stdio.h> //使用printf库函数之前,必须include <stdio.h>int main()//main函数 ...

  7. udp-->socket通信原理

    UDP数据通讯原理     UDP数据通讯分服务端(软件)和客户端端:     服务端(软件)(服务器)先运行,服务端,不需要事先知道客户端IP和port     客户端(软件)(客户端机器)后运行, ...

  8. Hessian 初探

    Hessian 是一个序列化协议, 他的优点在于比 Java 原生的对象序列化/反序列化速度更快, 序列化出来以后的数据更小. 序列化协议跟应用层协议无关, 可以将 Hessian 序列化以后的数据放 ...

  9. zabbix使用sendEmail发送邮件报警

    sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php.bashperl和web站 ...

  10. 使用 IntraWeb (41) - 数据控件速查

    TIWDBCheckBox 所在单元及继承链: IWDBStdCtrls.TIWDBCheckBox 主要成员: property AutoEditable: Boolean //根据 DataSou ...