我正在尝试让 Tomcat(目前作为服务在 Windows 2003 机器上运行)在 OutOfMemoryError 上转储堆。
(Tomcat 正在运行 Hudson,它在我构建的尾端报告堆空间问题。手动运行构建不会产生此类错误。Hudson 人员需要堆转储才能开始。)
按照其他地方的说明,我已经告诉 Apache 服务监视器配置它用来运行 Tomcat 的 JVM,以便在遇到 OutOfMemoryError 时通过将以下内容添加到 JVM 选项来转储堆:
-XX:+HeapDumpOnOutOfMemoryError
然后我再次运行构建。果然,它报告存在堆错误。我扫描整个磁盘寻找默认的 java_pid123.hprof 文件(显然 123 被 JVM 的 PID 替换)。任何地方都不存在 .hprof 文件。
我陷入了陷阱 22:我需要 Hudson 人员的堆转储来修复他们的内存泄漏,但如果我在 Tomcat 下运行 Hudson,我无法获得堆转储。
当 Tomcat 作为 Windows 服务运行时,是否有一些特殊的方法可以在出现 OutOfMemoryError 时从中获取堆转储?
我尝试过的另一件事是在“启动”和“关闭”选项卡上告诉它使用“Java”选项而不是“jvm”选项。我相信这应该告诉服务管理器尝试使用 Java 可执行命令启动 Tomcat,而不是直接启动 jvm.dll。当我这样做时,服务不会启动。
肯定有人遇到过类似的问题吗?
最佳答案
在终于把这个放到床上后,我想为可能有同样问题的其他人回答这个问题。
首先,如果您在 Windows 上安装 Tomcat,请不要使用 .exe 安装程序,即使它是由 Apache 推广的。它不会让您以系统帐户以外的任何身份运行 Tomcat,无论您做什么。系统帐户似乎没有权限在当前目录中写入 .hprof 文件,并且似乎没有任何 Windows 安全调整可以解决此问题。
好的,您已经从 .zip 发行版安装了 Tomcat。使用 service.bat 脚本将其安装为服务。确保将其设置为以您专门为此目的创建的特定用户身份运行。还要确保您希望 Tomcat 在发生堆转储时写入的文件夹可由该用户写入。
编辑 service.bat 文件以包含 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=C:\whatever 选项在正确的位置(您可以放置 JVM 选项的位置)。这应该可以解决问题。
关于java - 我可以让 Tomcat 作为转储堆的服务运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172220/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere