问题标签 [code-caching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Ruby on Rails 可以缓存控制器“只要代码没有更改”吗?
在工作中,我们有一种情况,当
运行,然后缓存所有控制器代码。这是为了加快开发服务器的速度。但这意味着每当我们更改控制器代码时,我们都需要重新启动服务器。
所以我们可以一起关闭控制器代码的缓存。但是不能有类似于包含javascript的机制吗
即只要没有代码变化就使用缓存的版本,但代码变化时重新编译?
可能是因为我们经常使用 HAML 和 SASS,所以在开发环境中加载一些页面(例如网站的主页)可能需要 40 秒,而且相当长。
ruby-on-rails - 在 Rails 中,为模型、视图、控制器、全部或单独打开代码缓存的标准方法是什么?
在运行 Rails 服务器时,通过使用以下行中的“缓存所有模型、视图、控制器代码”的标准方式是真的吗config/environments/development.rb
并且不要缓存它们中的任何一个:
并“有选择地”缓存其中任何一个,使用上面的false
行,并在config/environment.rb
:
它只会缓存模型代码。并缓存控制器代码或视图代码,只需添加
或者
到里面%W{ }
。比如我们只开发Views(HTML和CSS),那么在运行服务端就不需要重新加载Model和Controller代码,那么load_once_paths
为Models和Controllers设置,每次都让View代码加载?(有没有讨论这个的文档?)
java - Java 和 Tomcat - CodeCache 已满。编译器已被禁用
我的情况
- 我开发了一个用于文档分析的 Web 服务
- 此网络服务读取 txt 和 pdf 文档
- 为了阅读 pdf 文件,我正在使用我的大学顾问开发的 java 库
- 我正在使用 Java 7
- 我目前正在将它部署在 Tomcat v7.0 上
- 如果我从我的应用程序生成一个war文件并将其托管在我电脑上的本地tomcat上,或者如果我通过eclipse ee在tomcat上启动我的应用程序,则读取pdf文件没有问题
我的问题
- 我已经为自己设置了一个小服务器(不是最好的硬件,双核 cpu,4g 内存),安装了 tomcat,java 和其他对我来说似乎必要的东西。
- 当我现在使用 tomcat 管理器在服务器 tomcat 上部署战争文件时,一切正常,直到我尝试让应用程序读取 pdf 文件。
- 在应用程序读取了几页后,我收到一个错误,即 CodeCache 已满,因此编译已被禁用。
pdf 导入期间的示例错误输出
此日志显示了如何导入 pdf 以及在某些时候开始出现错误消息。我已将错误消息标记为粗体。
...
2012 年 5 月 31 日上午 11:15:40 infovis.structure.pdf.PDFImport process INFO:Processing Page 13
2012 年 5 月 31 日上午 11:15:40 infovis.structure.pdf.PDFImport process INFO:Processing Page 14
2012 年 5 月 31 日上午 11:15:41 infovis.structure.pdf.PDFImport process INFO:处理第 15 页
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1858 nmethods=1318 adapters=490 free_code_cache=44631Kb largest_free_block=45618688 Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1859 nmethods=1318 adapters=490 free_code_cache=44631Kb largest_free_block=45618688
2012 年 5 月 31 日上午 11:16:19 infovis.structure.pdf.PDFImport process INFO:处理第 16 页
2012 年 5 月 31 日上午 11:16:20 infovis.structure.pdf.PDFImport process INFO:Processing Page 17
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1860 nmethods=1318 adapters=490 free_code_cache=44630Kb largest_free_block=45618688 May 31, 2012 11:17:07 AM infovis.structure.pdf.PDFImport process INFO: Processing Page 18 Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1861 nmethods=1318 adapters=490 free_code_cache=44633Kb largest_free_block=45618688
等等...
到目前为止我尝试过的
我试图在我的服务器上更改 tomcat 配置中的缓存大小(我不是使用 linux shell 的最佳人选)。我尝试增加 CodeCache 大小以及其他缓存的大小,但问题仍然存在。我已经检查了我的代码是否存在泄漏,但还没有发现任何泄漏(请记住,如果我通过 eclipse 启动它,我不会收到此消息,因此这可能表明存在 tomcat(?) 配置问题)。我还尝试设置参数“UseCodeCacheFlushing”,当它变满时应该强制清空代码缓存,但不知何故它不会影响应用程序故障。
我的tomcat服务器配置
我读过默认 CodeCache 大小是 32MB 或 64MB,当它是 64 位应用程序时。我尝试保留512mb(也许我在配置中做错了什么?)但问题当然又发生了。
您可以在此处将 JVM 启动参数传递给 Java。如果未设置,默认选项将为:-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
使用“-XX:+UseConcMarkSweepGC”启用 CMS 垃圾收集器(提高响应时间)。如果您使用该选项并在只有一个 CPU 芯片且包含一个或两个内核的机器上运行 Tomcat,您还应该添加“-XX:+CMSIncrementalMode”选项。 JAVA_OPTS="-Djava.awt.headless=true -Xmx3g -Xms2g -XX:+UseCodeCacheFlushing -XX:+UseG1GC -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512m"
我对此的看法
在我研究的过程中,我发现了一些注释,CodeCache 相关问题可能表明内存泄漏问题,当出现编程失败时,其结果是垃圾收集器无法清空缓存。这可能是可能的,遗憾的是我没有阅读 pdf 的库的源代码。但另一方面,我在本地 tomcat(四核,4x 3.0ghz,也是 4g ram)上的台式电脑上阅读 650 页 pdf 时没有问题,这让我感到困惑。
难道这只是一个tomcat问题,如果我使用另一台服务器进行部署,比如glassfish,就可以解决吗?
任何人都可以帮助我或提供任何想法或建议吗?也许我做错了一些配置?我在使用 tomcat 或其他服务器方面没有那么经验,所以非常欢迎任何帮助。
非常感谢您的每一个回答,并认为您正在与我分享。
ruby-on-rails - 在 Mac OS X Mountain Lion 上升级到 Ruby 2.0 后 Rails 缓存我的代码
在 Mac OS X Mountain Lion 10.8.4 上从 Ruby 1.8.7 升级到 Ruby 2.0 后,Rails 3.2.13 在开发模式下缓存我的帮助模块、控制器和其他 ruby 代码
即使在 Rails 控制台中,我每次都重新启动服务器后才会获取代码更改。重装!控制台中的命令也不起作用,并且在我再次重新启动 rails 控制台之前不会重新加载我的代码更改。
Javascript 和 Sass 文件不会被缓存,但视图、控制器和其他 ruby 代码会被缓存。我检查了 development.rb 文件并将以下缓存设置设置为 false。
此外,在启动服务器时,它以开发模式启动,如控制台日志中所示
不知道发生了什么,但我确实更改了系统的时区和时间以进行测试,并将时间恢复为实际时间。
在以正确的时间和时区重新启动我的机器后,我什至将 repo 再次克隆到我的系统上,但仍然存在问题。有谁知道每次在开发模式下发出请求时如何解决这个问题或如何强制重新加载所有 ruby 代码?
java - 为什么java代码缓存大小在增长?
我有这个基本程序,它什么都不做,只是坐在那里等待输入:
当我运行这个时:
我通过 JConsole 连接以查看:
这仅仅是因为最初正在编译核心 java 字节码吗?当进程没有做任何事情时,代码缓存如何增加?
当我有这个版本(它使用Thread.sleep
)时:
我明白了:
那么……为什么会这样?
PS这是输出java -version
:
ruby-on-rails - 在 rspec 中使用动态混合重新加载类
我有以下型号
然而,在运行 rspec 测试时,在第一个 Chicken 初始化为性别后,通信方法被缓存并且所有 Chicken 都独立于他们的性别说出相同的内容,即使在 config/environments/test.rb 中将 cache_classes 设置为 false
如何在测试执行期间重新加载 Chicken 类或修改此代码以消除此问题?
java - 使用 JSF/Primefaces 应用程序时的 Java CodeCache 大小
我想问问你的经验。在过去的几个月里,我们解决了一些主要的性能问题。当用户使用我们的 JSF / PrimeFaces Web 应用程序更长的时间时,运行时性能变得越来越慢。这是我们的环境:
- JBoss 应用服务器 (EAP 6.2.2)
- 爪哇 7 (45)
- JSF 2.1.25
- PrimeFaces 3.5.3
经过一段时间的研究,我们发现服务器JVM的CodeCache(默认48MB)快满了。重新启动应用服务器后,性能再次非常好。我们可以看到 CodeCache 的大小每天增加大约 3-4 MB。当它达到缓存限制时,性能正在下降。
我们首先使用了 JVM 参数-XX:+UseCodeCacheFlushing
。但它似乎没有刷新足够的内存。所以我们决定将代码缓存大小增加到 128MB ( -XX:ReservedCodeCacheSize=128m
)。现在性能好久了,但我们怕只是推迟了问题。
所以我只想问你们是否有人面临类似的问题。
- CodeCache 的使用量稳定增长是否正常?
- 推荐的 CodeCache 大小是多少?
我希望可以聊聊这个。也许任何人都可以给我们一个提示。
提前致谢, SlimShady