﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-tornado</title><link>http://www.blogjava.net/tornado/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 05:59:37 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 05:59:37 GMT</pubDate><ttl>60</ttl><item><title>Java 多线程或内存泄漏缺陷排查</title><link>http://www.blogjava.net/tornado/archive/2007/07/09/129151.html</link><dc:creator>tornado</dc:creator><author>tornado</author><pubDate>Mon, 09 Jul 2007 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/tornado/archive/2007/07/09/129151.html</guid><wfw:comment>http://www.blogjava.net/tornado/comments/129151.html</wfw:comment><comments>http://www.blogjava.net/tornado/archive/2007/07/09/129151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tornado/comments/commentRss/129151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tornado/services/trackbacks/129151.html</trackback:ping><description><![CDATA[<strong>JVM Thread DUMP&nbsp; <br></strong>Windows 下用Ctrl-Break,Unix 下用 kill -3 &lt;pid&gt; 的命令让JVM输出 thread dump。<br>每隔几秒 thread dump 一次，多做几次，分析比较。
<p><strong>Thread Dump分析<br></strong>1 找出这几次Thread dump 文件中，有哪些 Java Thread 处于长时间等待状态，很有可能就是问题之所在。<br>2 如果Java 线程等在某些不可能出错的地方，如 java.lang.XXX/java.util.XXX对象的某个方法，则很有可能是因为出现了 OutOfMemoryError 异常，原因不外乎是JVM 堆内存过小或出现内存泄漏。<br>3 对于死锁，最直接的表现就是至少两个线程长时间等待相互持有的对象（每个线程所持有的对象和它当前等待的对象都可以从 dump 中看到）。<br>4 对于死循环，要辅助CPU占用率确定；如果发现CPU至少一颗使用率为100%，并且有线程长时间位于用户代码处，则很有可能是死循环引起。</p>
<p><br><strong>多线程缺陷排查<br></strong>对于Java死锁问题很少出现，多线程访问变量时冲突很常见。<br>一般出在多线程共享同一对象实例如全局Map，Servlet,Interceptor，或如多线程同时访问某个静态方法，而此静态方法不巧又访问另一个静态变量。<br>这类问题自测发现不了，在并发压力测试时才能发现。如果代码的入口检查做得好，多半会抛出一些莫名其妙的异常；要不然就会出现正常运行但数据库记录不对的情况。<br>对这种问题，并无多好的办法解决，主要还是靠看异常堆栈和静态代码分析来解决。<br><br><br><strong>内存泄漏排查</strong><br>一般用商用辅助工具排查，但有可能出现在JVM heap dump 模式下，运行极度缓慢的情况。<br>笨笨曾经用过一个非常简单的工具，效果不错，它可以做到在不影响jvm 执行速度的情况下，做heap dump，然后对dump出的文件进行排序，检查即可。</p>
<img src ="http://www.blogjava.net/tornado/aggbug/129151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tornado/" target="_blank">tornado</a> 2007-07-09 22:01 <a href="http://www.blogjava.net/tornado/archive/2007/07/09/129151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java压缩文件</title><link>http://www.blogjava.net/tornado/archive/2007/03/27/106720.html</link><dc:creator>tornado</dc:creator><author>tornado</author><pubDate>Tue, 27 Mar 2007 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/tornado/archive/2007/03/27/106720.html</guid><wfw:comment>http://www.blogjava.net/tornado/comments/106720.html</wfw:comment><comments>http://www.blogjava.net/tornado/archive/2007/03/27/106720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tornado/comments/commentRss/106720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tornado/services/trackbacks/106720.html</trackback:ping><description><![CDATA[
		<p>忙了一天就为了把几个文件变成zip包：<br />发现：1，java的zip中文有问题用ant的<br />             2，只能生成zip，不能往原有的zip里面添加东西<br /><br />/**<br />  * <br />  * @param list 准备压缩文件bean列表，bean里面是压缩文件的路进和名字<br />  * @param outDir 输出路径<br />  * @param outName  输出文件名<br />  */<br /> <br /> public static void zipFilesAntJar(List list,String outDir,String outName){<br />  FileOutputStream fout;<br />  org.apache.tools.zip.ZipOutputStream zipOut;<br />  try {<br />   fout = new FileOutputStream(outDir+outName);<br />   <br />   zipOut = new org.apache.tools.zip.ZipOutputStream(fout);<br />   for (Iterator iter = list.iterator(); iter.hasNext();) {<br />    FileBean fb = (FileBean) iter.next();<br />    <br />     FileInputStream fin = new FileInputStream(fb.getPathName());<br />     <br />     zipOut.setEncoding("GBK");<br />     zipOut.putNextEntry(new org.apache.tools.zip.ZipEntry(fb.getName()));<br />     <br />     int number = 0;<br />     byte[] b = new byte[1024];<br />     while((number=fin.read(b))!=-1){<br />      zipOut.write(b, 0, number);<br />     }<br />     zipOut.flush();<br />     fin.close();<br />    <br />   }<br />   zipOut.close();<br />   fout.close();<br />  } catch (FileNotFoundException e) {<br />   e.printStackTrace();<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />  }<br />  <br /> }</p>
		<p>public class FileBean {<br /> private String path;<br /> private String name;<br /> <br /> public FileBean(String path,String name){<br />  this.path = path;<br />  this.name = name;<br /> }<br /> public String getName() {<br />  return name;<br /> }<br /> public void setName(String name) {<br />  this.name = name;<br /> }<br /> public String getPath() {<br />  return path;<br /> }<br /> public void setPath(String path) {<br />  this.path = path;<br /> }<br /> public String getPathName(){<br />  return path+name;<br /> }<br />}<br /><br /> </p>
<img src ="http://www.blogjava.net/tornado/aggbug/106720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tornado/" target="_blank">tornado</a> 2007-03-27 17:19 <a href="http://www.blogjava.net/tornado/archive/2007/03/27/106720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>