我在CentOS 6.0上运行了一个java应用程序.它总是通过cron在后台运行.有时这个应用程序在使用100%cpu时进入等待状态.
我的java版本是:
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.4) (rhel-1.21.b17.el6-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)
其他症状是:
一个.该过程的一个线程似乎在循环中等待某事.使用strace进行跟踪时,它会连续显示以下o/p:
Run Code Online (Sandbox Code Playgroud)futex(0x7fb8000ac728, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0x7fb8000ac754, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1340347489,> 822867000}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
湾 似乎该过程已完成工作,查看它正在使用的文件.只剩下几个文件.'ls/proc/pid/fd /的输出显示:
Run Code Online (Sandbox Code Playgroud)lr-x------ 1 root root 64 Jun 22 13:13 0 -> pipe:[77107601] l-wx------ 1 root root 64 Jun 22 13:13 1 -> pipe:[77120162] l-wx------ 1 root root 64 Jun 22 13:13 2 -> /var/log/mithi/mcs/agent_account_mailstore_exceed_limit.sh.log lr-x------ 1 root root 64 …
听起来像一个明显答案的愚蠢问题:)
我仍然冒险要求加倍确定.
我们确实使用如下所示的断言
ArrayList alProperties = new ArrayList();
assert alProperties != null : "alProperties is null";
Run Code Online (Sandbox Code Playgroud)
问题是在断言上制作一个小而简单的文档是很困难的.有很多关于断言的书籍,但理想情况下,我喜欢给一个新的程序员非常简单的使用类似断言的指南.顺便说一句,像pmd这样的工具检查断言是否正确使用?
提前致谢.