周末日志记录 Activity 过多导致 ColdFusion 抛出以下错误:
Message: No space left on device
StackTrace: java.io.IOException: No space left on device at
java.io.FileOutputStream.writeBytes(Native Method) at
java.io.FileOutputStream.write(FileOutputStream.java:269) at
coldfusion.compiler.NeoTranslator. ......
到今天早上,ColdFusion 网站上的页面根本无法加载。光盘 (12Gig) 已用完 99% 以上。我们将几个文件移至第二张光盘,现在进度约为 80%,比以前低得多。我们将把记录 Activity 定向到第二个光盘 (100Gig) 以防止重复。在光盘上创建空间后,我们重新启动了 apache 和 Coldfusion,但页面仍然无法加载。
当我们运行top -H
时看来java正在接近100% CPU
运行。有谁知道发生了什么事或者我需要提供哪些信息以便其他人可以弄清楚?
设置为AWS、ubuntu 13.04、coldfusion 10、mysql (rds)。
更新
我做了一些非常奇怪但希望有用的观察。 我仍在尝试找到一个工具来帮助获取线程转储。每当我重新启动 ColdFusion 时,大多数页面加载良好并且 CPU 使用率似乎正常,大部分为 0.7 - 1.5%,但偶尔会出现峰值至10%可见。但有一个特定页面,当我尝试加载该页面时,CPU 使用率总是上升到 97%。加载良好的页面有一个简单的查询,从一个表中读取数据。这个有问题的页面有一个内部联接,并从两个表中读取数据。我不知道这有多大帮助,但我认为它太一致了,不容忽视。
更新2
自从这个问题开始以来,第一次出现以下错误,并且有数百行:
[2243:140630871263104] [error] ajp_send_request::jk_ajp_common.c (1649):
(cfusion) connecting to backend failed. Tomcat is probably not started
or is listening on the wrong port (errno=111)
// and
[2234:140630871263104] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1027):
Failed opening socket to (127.0.0.1:8012) (errno=111)
// and
[2756:139822377088896] [info] jk_handler::mod_jk.c (2702): No body with status=500
for worker=cfusion
更新 3 - 已解决
在剥离“有问题的”页面中的所有代码并简单地用一些纯文本替换它并尝试加载页面几次后,我们意识到 ColdFusion 没有加载实时页面。它正在加载页面的缓存编译版本,通常位于名为 <cf-root>/cfusion/wwwroot/WEB-INF/cfclasses
的子文件夹中。 。删除(或重命名)子文件夹解决了该问题。
最佳答案
您可能希望提供线程转储(其中一些以几秒的间隔进行)和 gc 日志。
可以使用 jstack(jdk 的 bin 目录中提供的工具)生成线程转储,并且必须事先激活垃圾收集器日志。
关于Java 以接近 100% CPU 的速度运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281011/