小编Pha*_*dek的帖子

使用 Java 使我的磁盘崩溃

我有一个必须做以下 3 件事的 Java 程序:

  1. 从网站下载文件。
  2. 通过 testA 和 testB 运行文件(均在 java 中)
  3. 删除文件并将测试结果保存在磁盘上。

这是为大约 1,000,000 个不同的站点完成的。这应该是一项相当简单的任务,因为我只是将其他程序的部分粘在一起:testA并且testB两者都已经分别针对数千万个不同的页面毫无问题地执行了,并且下载页面的例程也已经执行了大约一百万个页面几次,也从未出现任何问题。它们都在 Ubuntu 10.4 机器上执行。

但是,当一个接一个地执行这 3 个时,无论将文件写入哪个磁盘都会崩溃。我第一次在外部 USB HD 上运行它时,我必须手动断开连接并重新连接才能恢复运行(否则 Linux 将无法识别它)。下一次,在内部 HD 上,整个系统出现故障,我不得不手动重新启动它。写入 RAM 磁盘时也发生了同样的情况。

问题是我无法真正隔离问题。发生崩溃的时间太长(大约 50 小时左右,但它是随机的),因此测试花费的时间太长,并且没有系统日志指示故障发生的位置/方式。机器或 HD 只是停止响应。

除了崩溃,一切正常。文件正常创建和删除,线程不会死亡并正常执行,并且两个测试都正常工作。更改内存或线程数对锁定时间没有影响。我已经检查过 Sockets 或类似的东西没有被关闭,但我什至不知道如何开始测试,我不知道 Java 可能会导致系统崩溃。

编辑:挂断我的意思是,当我在外部 HD 上运行它时,Linux 无法识别 HD,当我在内部 HD 或 Ram 磁盘上运行它时,计算机不会响应任何 I/O无论如何,没有任何内容写入磁盘,没有记录 cactii 日志等。例如,无法使用 SSH 连接。

程序如何运行的示例:

List<String> pagesToDownload = getFromDataBase();
for(i=0;i<NumThreads;i++){
    launchTestThread();
}
Run Code Online (Sandbox Code Playgroud)

然后,在每个线程上:

String pageName = getNextPageToDownload();
File downloadedFile = downloadPage(pageName);
TestAResults testAResults …
Run Code Online (Sandbox Code Playgroud)

hard-drive java

6
推荐指数
2
解决办法
345
查看次数

标签 统计

hard-drive ×1

java ×1