现象:在项目中线程数量持续增长,且基本无法回收关闭,线程数量一直累积达到几万,影响CPU开销和性能,导致服务器卡死,连接上服务器后输入指令提示“无可分配内存”。查找原因:通过ps-eLf|grep'容器名'|wc-l命令找到项目的所占的线程数异常庞大,通过top-ppidH也发现该进程下大量占用资源的线程。进入容器内查看堆栈信息。通过**jstack-lpid|grep'java.lang.Thread.State'**发现项目的线程状态大多数都是WAITING(parking)状态,分析是线程一直处于等待状态一直在占用,造成GC无法执行,且新请求进来时造成线程占用累计。打印当前JVM快照:*
在Java线程转储中,您可以看到堆栈跟踪中提到的锁。似乎有三种信息:1:-locked(ajava.io.BufferedInputStream)2:-waitingtolock(aorg.alfresco.repo.lock.LockServiceImpl)3:-parkingtowaitfor(ajava.util.concurrent.SynchronousQueue$TransferStack)1:线程已获得对象0x00002aab329f7fa0的锁定。2&3:好像是说线程正在等待所述对象上的锁变为可用...但是2和3有什么区别? 最佳答案
在Java线程转储中,您可以看到堆栈跟踪中提到的锁。似乎有三种信息:1:-locked(ajava.io.BufferedInputStream)2:-waitingtolock(aorg.alfresco.repo.lock.LockServiceImpl)3:-parkingtowaitfor(ajava.util.concurrent.SynchronousQueue$TransferStack)1:线程已获得对象0x00002aab329f7fa0的锁定。2&3:好像是说线程正在等待所述对象上的锁变为可用...但是2和3有什么区别? 最佳答案
我刚刚使用googleplaceAPI查找附近的parking位。它工作得很好,当我向GoogleplaceAPI发出简单的GET请求时,我得到了响应。这是发送简单请求以获取附近位置的parking位的URLhttps://maps.googleapis.com/maps/api/place/nearbysearch/json?location=LAT,LONG&radius=500&types=parking&sensor=false&key=APIKEY当我经过latlong到达我当前所在的城市时,我得到:{"html_attributions":[],"results":[{"g