【发布时间】:2016-05-18 18:52:44
【问题描述】:
周末过多的日志记录活动导致 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 的子文件夹中找到。删除(或重命名)子文件夹解决了这个问题。
【问题讨论】:
-
这取决于您的应用程序,很可能在您重新启动时,它正在尝试执行一些挂起的任务,这会占用您所有的 CPU。
-
有没有办法找出该任务可能是什么?
-
试试jstack 看看JVM在做什么。
-
分析器应该有帮助,visualvm 与 jdk 一起提供。
-
@bayou.io,试过了,但没有安装 jstack。服务器上的java是用ColdFusion打包的。有没有办法自己安装?
标签: java mysql amazon-web-services coldfusion-10 ubuntu-13.04