apache服务器出现内存溢出的解决方法
解决溢出问题的方法

解决溢出问题的方法
解决溢出问题的方法主要有以下几种:
1. 代码审查和优化:通过仔细审查代码,找出可能导致溢出的源头,如大量数据的处理、循环引用等。
优化这些代码段,减少内存使用。
2. 调整内存参数:调整JVM的启动参数,如-Xms和-Xmx参数,可以动态调整内存分配。
这可以帮助避免内存溢出。
3. 使用内存分析工具:使用内存分析工具(如MAT)来分析内存使用情况,找出并解决内存泄漏问题。
4. 避免大对象分配:尽量避免一次性分配大量内存,可以将大任务拆分成小任务,逐个处理。
5. 优化数据库查询:数据库查询可能导致大量数据加载到内存中,可以通过优化查询语句,减少数据加载量。
6. 升级硬件:在某些情况下,增加物理内存或升级其他硬件(如硬盘)可能有助于解决溢出问题。
7. 使用缓存技术:对于频繁使用的数据,可以使用缓存技术来减少对数据库的访问,从而减少内存使用。
8. 日志分析:仔细分析应用程序日志,查找可能导致溢出的异常或错误。
9. 垃圾回收优化:根据应用程序的特点,选择合适的垃圾回收策略,以减少内存碎片和垃圾回收开销。
10. 避免第三方软件BUG:确保使用的第三方软件没有已知的内存泄漏问题或BUG,并及时更新软件。
这些方法可以根据实际情况进行选择和应用,一般需要通过不断测试和调优来找到最适合的解决方案。
排查内存溢出的方法和步骤

排查内存溢出的方法和步骤内存溢出是软件开发中常见的问题,它会严重影响程序的性能和稳定性。
为了确保软件的优质运行,及时排查和解决内存溢出问题至关重要。
本文将详细介绍排查内存溢出的方法和步骤。
一、了解内存溢出在排查内存溢出之前,我们需要了解什么是内存溢出。
内存溢出是指程序在运行过程中,申请的内存超过了系统能够提供的最大内存限制,导致程序无法正常运行。
内存溢出主要有以下几种类型:1.堆内存溢出:指程序在堆内存中申请的空间超过了限制。
2.栈内存溢出:指程序在栈内存中申请的空间超过了限制。
3.全局内存溢出:指程序在全局内存中申请的空间超过了限制。
二、排查内存溢出的方法1.分析程序代码(1)检查内存申请和释放的逻辑是否正确。
(2)检查是否存在内存泄露的情况,如已释放的内存还被程序使用。
(3)检查程序中是否存在大量临时对象创建和销毁,导致内存频繁申请和释放。
2.使用内存分析工具(1)Visual Studio Memory Profiler:适用于Windows平台的内存分析工具,可以监测程序运行过程中的内存使用情况,定位内存溢出问题。
(2)Valgrind:适用于Linux平台的内存分析工具,可以检测内存泄露、内存越界等问题。
(3)Xcode Memory Graph:适用于iOS和macOS平台的内存分析工具,可以查看内存使用情况,分析内存泄露等问题。
3.动态监测内存使用在程序运行过程中,实时监测内存使用情况,观察内存是否持续上升。
可以通过以下方法进行动态监测:(1)编写内存监控代码,定期输出程序内存使用情况。
(2)使用操作系统提供的命令行工具,如Windows的任务管理器、Linux的top和ps命令等。
三、排查内存溢出的步骤1.确定内存溢出的类型和范围。
2.使用分析工具或动态监测方法,定位内存溢出的问题代码。
3.修复问题代码,如优化内存申请和释放逻辑、消除内存泄露等。
4.重新运行程序,验证内存溢出问题是否已解决。
几种常见的内存溢出与解决办法

⼏种常见的内存溢出与解决办法引起内存溢出的原因有很多种,常见的有以下⼏种: 1.内存中加载的数据量过于庞⼤,如⼀次从数据库取出过多数据; 2.集合类中有对对象的引⽤,使⽤完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产⽣过多重复的对象实体; 4.使⽤的第三⽅软件中的BUG; 5.启动参数内存值设定的过⼩;1.堆设置jvm值的⽅法是通过-Xms(堆的最⼩值),-Xmx(堆的最⼤值)2.栈设置栈⼤⼩的⽅法是设置-Xss参数3.PermGen space第三个异常是关于perm的异常内容,我们需要的是设置⽅法区的⼤⼩,实现⽅式是通过设置-XX:PermSize和-XX:MaxPermSize参数4.DirectMemory第四个异常估计遇到的⼈就不多了,是DirectMemory内存相关的DirectMemoruSize可以通过设置 -XX:MaxDirectMemorySize参数指定容量⼤⼩,如果不指定的话,那么就跟堆的最⼤值⼀致内存使⽤监控⼯具jvmstat 解決辦法:【情况⼀】:ng.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,⼀个原因是真不够(如递归的层数太多等),另⼀个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下⾯的配置来解决: -Xms3062m -Xmx3062m【情况⼆】 ng.OutOfMemoryError:GCoverheadlimitexceeded 【解释】:JDK6新增错误类型,当GC为释放很⼩空间占⽤⼤量时间时抛出;⼀般是因为堆太⼩,导致异常的原因,没有⾜够的内存。
【解决⽅案】: 1、查看系统是否有使⽤⼤内存的代码或死循环; 2、通过添加JVM配置,来限制使⽤内存: -XX:-UseGCOverheadLimit【情况三】: ng.OutOfMemoryError:PermGenspace:这种是P区内存不够,可通过调整JVM的配置: -XX:MaxPermSize=128m -XXermSize=128m 【注】: JVM的Perm区主要⽤于存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace,这个区域成为年⽼代,GC在主程序运⾏期间不会对年⽼区进⾏清理, 默认是64M⼤⼩,当程序需要加载的对象⽐较多时,超过64M就会报这部分内存溢出了,需要加⼤内存分配,⼀般128m⾜够。
解决前端开发中的内存溢出问题

解决前端开发中的内存溢出问题在前端开发中,内存溢出是一个常见而令人头疼的问题。
当网页出现内存溢出时,页面可能会变得卡顿、反应迟缓,或者甚至直接崩溃。
因此,解决这个问题对于提升用户体验和网页性能至关重要。
本文将探讨一些解决前端开发中内存溢出问题的方法和技巧。
一、清理无用的资源内存溢出往往是因为页面上存在大量无用的资源而引起的。
这些资源可能是未关闭的定时器、未解绑的事件监听器、未销毁的对象等等。
因此,当我们不再需要这些资源时,要及时清理它们,以避免内存溢出的发生。
可以通过手动销毁或者使用弱引用来实现资源的自动释放。
二、优化DOM操作DOM操作是前端开发中常见的操作之一,而频繁的DOM操作往往会导致内存占用过高。
因此,在开发过程中,我们可以通过优化DOM操作来减少内存占用。
一种常见的优化方法是将DOM操作集中在一个批处理中,而不是频繁地进行单独的操作。
此外,也可以考虑使用文档碎片来减少DOM操作对内存的影响。
三、避免内存泄漏内存泄漏是内存溢出的主要原因之一。
它通常是由于未及时释放不再使用的对象或者数据造成的。
为了避免内存泄漏,我们可以通过一些方法来进行监测和调试。
例如,使用浏览器的内存分析工具来检测内存占用情况;使用代码审查工具来查找潜在的内存泄漏问题等等。
四、合理管理内存内存管理是解决内存溢出问题的另一个重要方面。
在前端开发中,我们可以通过一些技术手段来管理内存的分配和释放。
一种常见的方法是使用垃圾回收机制来自动回收不再使用的内存。
JavaScript引擎会自动标记和清理不再使用的对象,以腾出内存空间。
此外,我们也可以手动管理内存,使用一些优化内存占用的技巧,如对象池、数据缓存等。
五、优化网络请求网络请求也是前端开发中常见的操作之一。
不合理的网络请求可能导致内存占用过高。
因此,我们在开发中应尽量减少不必要的网络请求,合理使用缓存机制,以及对请求的数据进行合理的清理和释放。
六、使用合适的数据结构数据结构的选择对于内存的占用具有重要影响。
电脑开机后出现内存溢出该如何处理

电脑开机后出现内存溢出该如何处理在我们日常使用电脑的过程中,可能会遇到电脑开机后出现内存溢出的情况。
这是一个让人颇为头疼的问题,不仅会影响电脑的运行速度,还可能导致程序崩溃、系统死机等严重后果。
那么,当遇到这种情况时,我们应该如何处理呢?下面就来给大家详细介绍一下。
首先,我们需要了解什么是内存溢出。
简单来说,内存溢出就是指程序在运行过程中,申请的内存空间超过了系统所能提供的最大内存空间,从而导致程序无法正常运行。
这种情况通常发生在运行大型程序、多个程序同时运行或者电脑内存本身较小的情况下。
当电脑开机后出现内存溢出时,第一步我们可以尝试重新启动电脑。
有时候,可能只是系统的一时错误或者某个程序的异常导致了内存溢出,通过重启电脑,系统会重新初始化,可能会解决这个问题。
如果重启电脑后问题仍然存在,那么我们就需要深入排查原因了。
首先,检查一下是否有程序在后台大量占用内存。
可以打开任务管理器(按下 Ctrl + Shift + Esc 组合键),查看各个进程的内存使用情况。
如果发现某个程序占用内存过高,比如一些大型游戏、图形设计软件等,而此时您又不需要使用这些程序,可以将其关闭,以释放内存。
另外,电脑中的病毒和恶意软件也可能导致内存溢出。
因此,及时进行病毒扫描和查杀是很有必要的。
您可以使用电脑自带的杀毒软件或者第三方杀毒软件进行全面扫描,清除可能存在的病毒和恶意软件。
接下来,检查一下电脑的虚拟内存设置。
虚拟内存是在硬盘上开辟的一块空间,用于在物理内存不足时充当临时内存。
如果虚拟内存设置过小,也可能导致内存溢出。
在 Windows 系统中,您可以通过以下步骤设置虚拟内存:右键点击“我的电脑”,选择“属性”,然后在“高级系统设置”中点击“性能”选项下的“设置”,再切换到“高级”选项卡,点击“更改”按钮,在这里可以自定义虚拟内存的大小。
一般来说,建议将虚拟内存设置为物理内存的 15 到 2 倍。
除了以上方法,如果您的电脑内存本身较小,那么考虑升级内存也是一个不错的选择。
Apache出现的CPU高占用率该怎么解决

Apache出现的CPU高占用率该怎么解决关于网站服务器的介绍,站长们多少会有所了解,其重要性也直接影响着网站的正常运营,所以说,选择服务器也是比较重要的,那么对于apache出现的cpu高占用率,该怎么解决呢?专职优化、域名注册、网站空间、虚拟主机、服务器托管、vps主机、服务器租用的中国信息港为你做详细的介绍!下面我们针对几种错误信息进行分析并给出解决的方法:1. Apache与WinSock v2相冲突Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。
其错误提示如下所示:[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.[error] (OS 10038) : Child 3356: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.[warn] (OS 121)信号灯超时时间已到。
: winnt_accept: Asynchronous AcceptEx failed.[warn] (OS 64)指定的网络名不再可用。
: winnt_accept: Asynchronous AcceptEx failed.可以依次采用下面的方法来解决上面的问题,如果进行了一步还有问题就继续下一步:1) 在httpd.conf文件中使用 Win32DisableAcceptEx 禁止Apache使用Microsoft WinSock v2 API :1.<IfModule mpm_winnt.c>2.Win32DisableAcceptEx # 禁止使用AcceptEx()3.</IfModule>2) 使用System Repair Engineer(SREng)查看WinSocket供应者,如果出现非MS的陌生项则将其删除,并使用软件的“重置WinSocket”按钮进行重置。
解决APACHE服务器不定时挂掉故障一例

圆嘟嘟选择的主机搭配是Windows 2003 Server+Apache+PHP+Mysql,当网站初步上线测试后,我在主机运维方面遇到了很多问题,这里先说一个比较罕见,而且也让我头疼好几天的问题,就是APACHE在运行一段不定时的时间后,就自动停止了,Windows系统日志显示是:Apache2 服务因 1 (0x1) 服务性错误而停止。
而APACHE的error日志里最后的内容如下:[Thu Mar 21 01:08:09.187500 2013] [mpm_winnt:notice] [pid 2988:tid 1696] AH00358: Child: Process exiting because it reached MaxConnectionsPerChild. Signaling the parent to restart a new child process.[Thu Mar 21 01:08:09.203125 2013] [mpm_winnt:notice] [pid 2992:tid 436] AH00424: Parent: Received restart signal -- Restarting the server.[Thu Mar 21 01:08:11.000000 2013] [ssl:warn] [pid 2992:tid 436] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache][Thu Mar 21 01:08:11.187500 2013] [mpm_winnt:notice] [pid 2988:tid 1696] AH00364: Child: All worker threads have exited.别的内容似乎都正常,除了SSL的警告外,一开始是搞不清楚状况,以为是SSL 配置有问题,就对SSL进行了配置,但配置完以后,是不提示“Session Cache is not configured”了,但故障依然,我又继续从APACHE的错误日志中寻找线索,这次我用到的关键字是“MaxConnectionsPerChild”,这个配置可能很多人也不知道是什么,这是APACHE2.4才改成这样的,原来叫MaxRequestsPerChild,意思是指子进程的最大连接数,当达到设置值以后,APACHE就会结束当前的子进程,释放内存,再开启新的子进程,这个设置是在httpd-mpm.conf里面的,因为是运行在Windows环境下,所以对就的是WinNT MPM,原来的设置是:ThreadsPerChild 250MaxConnectionsPerChild 10000都说为了防止内存溢出,MaxConnectionsPerChild不要设成0,但可以考虑设成小的数值,于是我设成500,继续测试,但不管我改成多少,APACHE还是依然不定时就挂了,依照网上有关的方法我全试了个遍,终究没有解决这个问题,我都动了重置系统再来的念头了...在解决这个问题的过程中,我发现系统运行的非常非常慢,打开任务管理器一看,内存居然占了3G多,才发现其实APACHE其实并没有结束掉子进程,内存一直占用着并没有得到翻译,我好像得到点启发了,看来这压根跟MaxConnectionsPerChild的设置没多大的联系,而是在达到子进程限定的线程数后,当APACHE尝试关闭当前子进程再重新开启新的子进程时发生了什么事情让它这么做失败了呢?我又打开了Windows的日志查看器,终于在应用程序日志里找到一条跟APACHE出错同时产生的日志,内容是“事件 ID ( 487 )的描述(在资源( Zend Optimizer+ )中)无法找到。
内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案内存溢出是指程序在运行过程中申请的内存超过了系统或者进程所能提供的上限。
导致内存溢出的原因可能是程序中存在内存泄漏、内存分配过多或者递归调用过深等。
下面将介绍三种常见的内存溢出情况及其系统配置解决方案。
1.程序内存泄漏导致内存溢出:内存泄漏指程序在运行过程中动态分配内存空间后,没有对其进行释放,导致一部分内存无法再次使用。
长时间运行的程序中,如果内存泄漏较为严重,系统可用内存会不断减少,直到最终耗尽所有内存资源。
解决方案:使用内存泄漏检测工具来检测和修复程序中的内存泄漏问题。
同时,可以考虑使用自动内存管理的编程语言,如Java和Python,在程序运行过程中自动回收未使用的内存。
2.内存分配过多导致内存溢出:解决方案:优化程序的内存使用,尽可能减小内存分配的数量和大小。
可以通过使用更高效的内存管理算法来减少内存碎片,或者使用内存池技术来提前分配一定量的内存供程序使用。
3.递归调用过深导致内存溢出:递归函数在每次调用时会将一定量的数据压入栈中,如果递归调用层数过深,栈的空间可能会超过系统的限制,从而导致内存溢出。
这种情况通常发生在没有设置递归终止条件或者递归层数过多的情况下。
解决方案:优化递归算法,设置合适的递归终止条件,避免递归调用过深。
如果无法避免使用递归算法,可以考虑使用尾递归或者迭代算法来替代递归调用,减少栈的压力。
在系统配置方面,可以采取以下措施来预防和解决内存溢出问题:1.增加系统内存容量:如果内存溢出是由于系统可用内存不足引起的,可以考虑增加系统的内存容量。
这可以通过增加物理内存条或者使用虚拟内存技术来实现。
虚拟内存技术会将部分磁盘空间用作缓存,并将一部分数据暂时存储在磁盘上,以释放内存空间。
2. 调整JVM参数:对于使用Java虚拟机(JVM)的应用程序,可以通过调整JVM的参数来控制内存的分配和管理。
例如,可以通过设置-Xmx参数来限制JVM使用的最大堆内存大小,或者通过设置-XX:MaxPermSize参数来限制JVM使用的最大持久代(PermGen)内存大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
apache服务器出现内存溢出的解决方法2011-10-08 14:26Tomcat内存溢出的原因在生产环境中tomcat内存设置不好很容易出现内存溢出。
造成内存溢出是不一样的,当然处理方式也不一样。
这里根据平时遇到的情况和相关资料进行一个总结。
常见的一般会有下面三种情况:1.OutOfMemoryError: Java heap space2.OutOfMemoryError: PermGen space3.OutOfMemoryError: unable to create new native thread.Tomcat内存溢出解决方案对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。
(-Xms -Xmx -XX:PermSize -XX:MaxPermSize)最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。
第一种:是堆溢出。
原因分析:JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。
可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
Heap size 的大小是Young Generation 和Tenured Generaion 之和。
在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。
-Xms:初始堆大小-Xmx:最大堆大小但堆的大小受下面三方面影响:1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64位操作系统对内存无限制。
)2.系统的可用虚拟内存限制;3.系统的可用物理内存限制。
堆的大小可以使用 java -Xmx***M version 命令来测试。
支持的话会出现jdk的版本号,不支持会报错。
-Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。
可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置实例,以下给出1G内存环境下java jvm 的参数设置参考:JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m-XX:MaxPermSize=128m -Djava.awt.headless=true "JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m"CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m-XX:NewSize=192m -XX:MaxNewSize=384m"服务器为1G内存:JAVA_OPTS="-server -Xms800m -Xmx800m-XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "服务器为64位、2G内存: JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSize=128M-XX:MaxNewSize=256m -XX:MaxPermSize=256m'-------------------解决方案1:-----------------------------前提:是执行startup.bat启动tomcat的方式Linux服务器:在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'或者 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"或者 CATALINA_OPTS="-server -Xms256m -Xmx300m"Windows服务器:在catalina.bat最前面加入set JAVA_OPTS=-Xms128m -Xmx350m或者set CATALINA_OPTS=-Xmx300M -Xms256M(区别是一个直接设置jvm内存,另一个设置tomcat内存,CATALINA_OPTS似乎可以与JAVA_OPTS不加区别的使用)基本参数说明-client,-server这两个参数用于设置虚拟机使用何种运行模式,一定要作为第一个参数,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。
相反,server模式启动比client慢,但可获得更高的运行性能。
在windows上,缺省的虚拟机类型为client模式,如果要使用server模式,就需要在启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式,尤其是多个CPU的系统。
在Linux,Solaris上缺省采用server模式。
此外,在多cup下,建议用server模式-Xms<size>设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1MB,可用k(K)或m(M)为单位来设置较大的内存数。
初始堆大小为2MB。
加“m”说明是MB,否则就是KB了。
例如:-Xms6400K,-Xms256M-Xmx<size>设置虚拟机的最大可用大小,缺省单位为字节。
该值必须为1024整数倍,并且要大于2MB。
可用k(K)或m(M)为单位来设置较大的内存数。
缺省堆最大值为64MB。
例如:-Xmx81920K,-Xmx80M当应用程序申请了大内存运行时虚拟机抛出ng.OutOfMemoryError: Java heap space错误,就需要使用-Xmx设置较大的可用内存堆。
PermSize/MaxPermSize:定义Perm段的尺寸,即永久保存区域的大小,PermSize为JVM启动时初始化Perm 的内存大小;MaxPermSize为最大可占用的Perm内存大小。
在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.-------------------解决方案2:------------------------前提:是执行startup.bat启动tomcat的方式手动设置Heap sizeWindows服务器:修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:Java代码set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m注:JAVA_OPTS是保留先前设置。
Linux服务器:修改TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"注:$JAVA_OPTS是保留先前设置。
-------------------解决方案3:-----------------------------前提:是执行windows的系统服务启动tomcat的方式但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat ServiceManager\Tomcat5\Parameters\JavaOptions原值为-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"-Xrs加入 -Xms300m -Xmx350m重起tomcat服务,设置生效-------------------解决方案4:-----------------------------前提:是执行windows的系统服务启动tomcat的方式在安装tomcat时若有勾选"NT Service(NT/2000/XP only)"则安装完成后在安装目录的"bin"目录里会有一个tomcat.exe的档案先把tomcat的服务停掉在命令列模式下(运行里输入CMD)将目录切换到tomcat的bin目录用下面的命令把服务移除tomcat -uninstall "Apache Tomcat 4.1"接下来,写个批处理。
内容如下set SERVICENAME=Apache Tomcat 4.1set CATALINA_HOME=E:\Tomcat 4.1.24set CLASSPATH=D:\j2sdk1.4.1_01\libset JAVACLASSPATH=%CLASSPATH%set JAVACLASSPATH=%JAVACLASSPATH%;�TALINA_HOME%\bin\bootstrap.jarset JAVACLASSPATH=%JAVACLASSPATH%;�TALINA_HOME%\common\lib\servlet.jarset JAVACLASSPATH=%JAVACLASSPATH%;%JAVA_HOME%\lib\tools.jartomcat.exe -install "%SERVICENAME%" "%JAVA_HOME%\jre\bin\server\jvm.dll"-Djava.class.path="%JAVACLASSPATH%" -Dcatalina.home="�TALINA_HOME%" -Xms512m -Xmx768m -start org.apache.catalina.startup.Bootstrap -params start -stoporg.apache.catalina.startup.Bootstrap -params stop -out "�TALINA_HOME%\logs\stdout.log" -err "�TALINA_HOME%\logs\stderr.log"注意,从 tomcat.exe -install开始的是最后一行!不要手工回车换行把这一行分成了好几段。