Thursday, October 21, 2010

[转]TOMCAT内存大小调整

一、tomcat内存设置问题

   在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理):
   1.  java.lang.OutOfMemoryError: PermGen space
       PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域OutOfMemoryError: PermGenspace。从文字上看就是内存溢出,解决方法是加大内存。为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGenspace区域,它和存放Instance的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
       解决方法: 手动设置MaxPermSize大小
       a.如果tomcat是以bat方式启动的,则如下设置:
       修改TOMCAT_HOME/bin/catalina.sh
       在"echo "UsingCATALINA_BASE:   $CATALINA_BASE""上面加入以下行:
       JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
       b.如果tomcat是注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值。
           打开注册表,找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache SoftwareFoundation\Procrun2.0\htfty\Parameters\Java,其中目录地址中红色标注的(如htfty)需要根据不同情况作修改,为tomcat服务注册成windows服务的名称。可以看到JvmMs和JvmMx项,其中JvmMs设置最小的内存使用参数,JvmMx设置最大的内存使用参数。设置好JvmMs和JvmMx项的值,重启tomcat服务器即可生效。
   建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
    2.  java.lang.OutOfMemoryError: Java heapspace
          JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。JVM在启动的时候会自动设置Heapsize的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn-Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和TenuredGeneraion 之和。在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
   解决方法:手动设置Heap size
   a.如果tomcat是以bat方式启动的,则如下设置:
   修改TOMCAT_HOME/bin/catalina.sh
    在"echo"UsingCATALINA_BASE:   $CATALINA_BASE""上面加入以下行:
   JAVA_OPTS="-server -Xms800m-Xmx800m   -XX:MaxNewSize=256m"
   b.如果tomcat是注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值。
           打开注册表,找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache SoftwareFoundation\Procrun2.0\htfty\Parameters\Java,其中目录地址中红色标注的(如htfty)需要根据不同情况作修改,为tomcat服务注册成windows服务的名称。可以看到JvmMs和JvmMx项,其中JvmMs设置最小的内存使用参数,JvmMx设置最大的内存使用参数。设置好JvmMs和JvmMx项的值,重启tomcat服务器即可生效。
提示:Heap Size最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

二、Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度都会影响程序的性能。比如说在应用程序用到最大内存的时候,JVM是要先去做垃圾回收的动作,释放被占用的一些内存。所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明,一般的JAVA程序在运行都可以通过中-Xms-Xmx来调整应用程序的初始内存和最大内存:这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。
    Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。有以下几种方法可以选用:
第一种方法:
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB。
第二种方法:环境变量中设    变量名:JAVA_OPTS    变量值:-Xms512m   -Xmx512m
第三种方法:前两种方法针对的是bin目录下有catalina.bat的情况(比如直接解压的Tomcat等),但是有些安装版的Tomcat下没有catalina.bat,这个时候可以采用如下方法,当然这个方法也是最通用的方法:

 

打开tomcatHome/\bin/\tomcat5w.exe,点击Java选项卡,然后将会发现其中有这么两项:Initialmemory pool和Maximum memory pool.Initial memorypool这个就是初始化设置的内存的大小。Maximum memorypool这个是最大内存的大小设置完了就按确定然后再重启TOMCAT你就会发现tomcat中jvm可用的内存改变了
另外需要考虑的是Java提供的垃圾回收机制。

虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。   如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究 垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

一个要注意的地方:建议把内存的最高值跟最低值的差值缩小,不然会浪费很多内存的,最低值加大,最高值可以随便设,但是要根据实际的物理内存,如果内存设置太大了,比如设置了512M最大内存,但如果没有512M可用内存,Tomcat就不能启动,还有可能存在内存被系统回收,终止进程的情况。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/coolwzjcool/archive/2008/06/13/2544448.aspx

Wednesday, October 13, 2010

mysql连接,访问拒绝

错误信息:Access denied for user 'kscm'@WIN-WP4X5EPPTIO'(useing password:YES)

情景A:
  1. 明明本机上的客户端可以正常连接数据库,但程序部署起来还是报错.
  2. 明明本机的电脑名称WIN-WP4X5EPPTIO已改名了,也重启了电脑,但是连接时还是显示旧的信息..

解答A:
  1. 程序部署连接数据库的账号信息有误
  2. 在my.ini文件中找到[mysqld],在此段的配置信息中添加skip-name-resolve,这样客户端请求连接时就会用IP地址了.


情景B:

用新创建的用户执行一些SQL脚本(仓库新数据库及表),但执行失效,反应过来估计权限不够,应该用root账号.

然后重新想用root账号连接,却怎么也连不上去了.前几分钟还连过一次,现怎么不行了.
解答B:
原以为是像上次出现密码有问题??因此按照以下步骤进行了密码更新:
  1. 首先,在my.ini文件中的[mysqld]段配置信息内加上skip-grant-tables
  2. 重启mysql服务
  3. 来到mysql安装目录下的bin,打开cmd,执行mysql -u root,这时候要你输入密码,回车即可
  4. 在mysql>环境下执行以下几条命令:

mysql>use mysql;

mysql>UPDATE user SET password=PASSWORD("5688") WHERE user='root';

mysql>FLUSH PRIVILEGES;


结果,重新登录仍然无效.
同事说,其实密码是已经改了,大部分跟授权有关.
因此,他按照以下步骤进行了处理:
  1. 首先,在my.ini文件中的[mysqld]段配置信息内加上skip-grant-tables
  2. 重启mysql服务
  3. 来到mysql安装目录下的bin,打开cmd,执行mysql -u root,这时候要你输入密码,回车即可
  4. 在mysql>环境下执行以下命令,目的是让111.111.111.158机子可以用root账号登录

mysql>use mysql;
mysql>update user set host = '111.111.111.158' where user = 'root';
  1. 利用111.111.111.158机子的客户端,竟然可以正常连接.且继续执行以下命令,目的是让本机可以连接

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.111.111.160' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
  1. 结果无效,不死心的参考资料继续执行:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD'*00A51F3F48415C7D4E8908980D443C29C69B60C9';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'dubabuild' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
  1. 回到本机,执行以下命令行,都一样报"Access denied"的错误信息

mysql -u root -h 10.20.239.160
mysql -u root -h 127.0.0.1
mysql -u root -h localhost
  1. 继续在网络上查找解决的方法,看到一则信息后改变了连接方式即执行mysql -u root -p,

这里候要求你输入密码,直接输入新密码,登录成功.
  1. 回到mysql administrator工具,利用root账号采用新的密码,一样登录成功了.
  2. 然后,利用mysql admini工具,保留%/localhost的授权连接,退出再重新登录正常了.


总结:如果出现类似这样的问题,一检查账号密码是否有误,二检查援权问题.

重装mysql,服务启动不了

问题现象:
---------------------------
Services
---------------------------
Windows could not start the MySQL service on Local Computer.
Error 1067: The process terminated unexpectedly.
---------------------------
OK
---------------------------
问题解答:
在my.ini中找到datadir="E:/mysql_data/Data/",然后将在此目录下的数据删除

Tuesday, October 12, 2010

mysql编码设置

问题现象:

mysql administrator工具连接数据库,打开tools->mysql command line client执行sql脚本,发现带有中文的sql脚本在执行后,数据表里查看时,全变为乱码了.

问题解答:

检查了sql脚本的存储格式,全都是存为utf-8了.那就是mysql administrator工具编码的问题了.找了tools->options的信息,也没见设置编码的配置.

突然想,执行脚本用的是mysql命令,那应该跟mysql工具的环境有关系才对.因此找到设置编码的方式了:mysql安装后,默认的编码是Latin1,这是不支持中文的.打开my.ini文件,分别将mysql和mysqld下的default-character-set值改为utf8,然后
重启mysql,这就可以正常显示中文了(呃,乱码的数据表需要重新执行脚本,不然好像还是乱码).

[转]mysql安装


Install and Configure MySQL 5.1.30 on Windows Server 2008

Feb
26
« »

In this article I will perform an installation of MySQL 5.1.30 on Windows Server 2008, I will take you step-by-step through the whole installation. MySQL is the world's most popular open source database engine, it's fast, stable and reliable for most situations.

Configuration Information

Platform: Hyper V Host OS: Windows Server 2008 Installation Media: MySQL 5.1.30 was downloaded from http://dev.mysql.com/downloads/ CPU: 2 dedicated 2.0Ghz RAM: 1024mb Disk: 40GB

Installation

Run Setup.exe – This version of

Click "Next" on the Setup Wizard window

I am going to select "Custom" installation so I can see all available options, Press "Next" to continue

I want to change the location of my installation to C:MySQL, press "Change"

I changed "C:Program FilesMySQLMySQL Server 5.1″ to "C:MySQL", I am only changing this location for personal preference, and you can make it whatever directory you wish. Press "OK" to continue

I also want to change the location of the data the MySQL will store. Select "MySQL Server Datafiles. Press "Change" to continue

I changed "C:Program FilesMySQLMySQL Server 5.1″ to "C:MySQL", I am only changing this location for personal preference, and you can make it whatever directory you wish. Press "OK" to continue

Press "Next" to continue

Setup is ready to begin the installation. I verified that the destination folder and data folder is set to C:MySQL. Press "Install" to continue

Installation will begin to copy the files

After installation MySQL includes shameless plugs for their enterprise subscription. Press "Next" to continue

Here is one more shameless plug from MySQL. Press "Next" to continue

Select "Configure the MySQL Server now". Press Finish to continue

Configuration

Press "Next" at the Welcome screen to continue

Because I am a techie I am going to select "Detailed Conifugration". Press "Next" to continue

I am going to use this to run blog applications so I am going to select "Server Machine", you can select what is best for your suited for your goal. Press "Next" to continue

I am going to choose "Multifunction Database" because it allows me the flexibility of Transactional and Non-Transactional Database's to coexist, again you can select what is best for your suited for your goal. Press "Next" to continue

Choose "Installation Path" so it will store the InnoDB Tablespace Settings under the Installation directory. I like to keep everything in the same place, the default location puts this elsewhere. Press "Next" to continue

Because this is for a blog I am going to select "Online Transaction Processing (OLTP)", you can select what is best for your suited for your goal. Press "Next" to continue

I left the defaults for TCP/IP and I unchecked "Enable Strict Mode", some blog applications associated with WordPress have an issue if this is enabled. Press "Next" to continue

Keep the default "Standard Character Set". Press "Next" to continue

I checked off "Install As Windows Service", set the "Service Name" to "MySQL" and checked off "Launch the MySQL Server automatically". I checked off "Include Bin Directory in Windows PATH" so I can run the client tools from any location in the command prompt and not have to go to the C:MySQLBin directory. Press "Next" to continue

Enter a new password for the root account, retype the password. Press "Next" to continue

Press "Execute" to initiate the configuration changes to MySQL

The configuration wizard will make the requested changes

Make sure all changes were successful. Press "Finish" to continue

Verification

Go to C:MySQL. Bin is where the system files for MySQL are located. Data is the directory where the databases will be stored, and my.ini is where most of the configuration is kept.

From the command prompt run the following command, if you get the error "'mysql' is not recognized as an internal or external command" then you will need to navigate to the "Bin" directory under your MySQL Installation and run it from there. This is used to test connectivity to the MySQL Server.

mysql –u root –p