0

周末过多的日志记录活动导致 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%,远低于以往的水平。我们将把日志记录活动定向到第二张光盘 (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. 删除(或重命名)子文件夹解决了该问题。

4

1 回答 1

1

您可能想要提供线程转储,其中一些以几秒钟的间隔进行,以及 gc 日志。

线程转储可以使用 jstack(您的 jdk 的 bin 目录中提供的工具)生成,并且必须事先激活垃圾收集器日志。

于 2016-02-08T23:07:18.707 回答