Java如何在这样运行时停止冻结linux操作系统?
我有一个问题,我的应用程序冻结。当我使用新的P2P(“字符串”)代码>这是一个很重的GUI 我的困惑是,在while循环中运行它的最佳方式是什么?这样就不会释放整个操作系统了 示例用例:Java如何在这样运行时停止冻结linux操作系统?,java,linux,swing,Java,Linux,Swing,我有一个问题,我的应用程序冻结。当我使用新的P2P(“字符串”)这是一个很重的GUI 我的困惑是,在while循环中运行它的最佳方式是什么?这样就不会释放整个操作系统了 示例用例: public void run() { while (true) { byte[] buf = new byte[5024]; int bytes_read = 0; bytes_read = sockInput.read(buf, 0, buf.length)
public void run() {
while (true) {
byte[] buf = new byte[5024];
int bytes_read = 0;
bytes_read = sockInput.read(buf, 0, buf.length);
String data = null;
data = new String(buf, 0, bytes_read);
System.out.println("[TCP]: incomeing data: " + bytes_read + " bytes, data=" + data);
//
// get some commands on TCP parse it and trigger this
//
new P2P(main.my_info_array);
// After some time the whole OS freeze requires shutdown reboot physically
// how to improve it
}
}
在后台线程(即事件调度线程以外的线程)中执行长时间运行的任务。这是必需的,因为Swing是单线程的。有关详细信息,请参阅。好的,请执行以下操作: 1) 告诉我们您的操作系统(如CentOS 5.5)、硬件(如4-CPU 2.4GHz奔腾、2GB RAM)和JDK(如Sun Java、32位1.6.021) 2) 如果可能,请指定指向P2P库的链接以及版本# 3) 修改代码,使其只读取套接字并调用P2P一次(即,请注释掉循环) 4) 在单独的终端窗口中运行“top” 5) 运行你的程序。观察您的程序是否突然开始消耗大量内存和/或CPU。“顶部”在冻结前最后说什么
6) 报告你的发现。什么是P2P?在不知道它的功能和行为方式的情况下,不太可能有人能提供帮助问:当“冻结”发生时,您能转到另一个控制台,或者“ping”或“ssh”到主机吗?你能做一个“ps-eaf”来看看它是CPU绑定的还是内存绑定的吗?@YumYumYum-你能告诉我们“ping”和/或“telnet/ssh”中的任何一个是否有效吗?如果可能的话,请尝试获取“top”和/或“ps-eaf”输出,好吗?@palsm4:当时没有一个可以工作。@Jim Garrison:P2P是一个swing GUI界面,有很多图标和背景图像,GUI只是一个JWindow,Jbutton组合。我们需要从OP获得更多关于“冻结”的信息。如果应用程序挂起(但操作系统很好)一根线是个好主意。否则,如果“P2P()”真的破坏了系统,我们需要知道如何以及为什么,然后才能修复它:)知道我们是否可以“ping”,或者尝试运行“top”或“ps-eaf”,这绝对是一个好的开始。没错。OP的问题不是冻结GUI,而是冻结系统。我认为这个答案有点言之过早,过于简单化了。@paulsm4,很公平!对于气垫船,我同意不成熟的说法,但考虑到我在答案中所述,我不认为这个答案“过于简单化”。@paulsm4:当P2P()在分钟或随机持续时间后启动时。它冻结了。冻结,我的意思是整个系统冻结,所以就像死锁一样,什么都不起作用。我需要物理重启/关机。没有点没有终端没有工作没有鼠标,键盘没有。