JSch com.jcraft.jsch.Session sftp連接超時時間timeout默認設置0 導致一直處於等待連接狀態


線上排查發現一個定時任務task(原來每隔1小時跑一次的),5.7號只跑了一次,根據日志排查發現,打印了開始的日志,到連接sftp時,下面沒有日志了

 

 

查看jvm堆棧信息:

jstack -l pid >jstack.log (pid進程id)

jstack -l 63522 >63522-jstack.log

 

scheduler_Worker-25(日志里看到也是這個線程)

 

"scheduler_Worker-25" #38 prio=5 os_prio=0 tid=0x00007f0248e4a000 nid=0xf888 runnable [0x00007f0200fcb000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.net.SocketInputStream.read(SocketInputStream.java:224)
        at com.jcraft.jsch.IO.getByte(IO.java:73)
        at com.jcraft.jsch.Session.connect(Session.java:263)
        at com.jcraft.jsch.Session.connect(Session.java:183)
        at com.cmcc.open.ss.util.CommonSftpUtil.getSftpConnect(CommonSftpUtil.java:85)
        at com.cmcc.open.task.service.PhoneAscriptionQueryTask.downloadAndBak(PhoneAscriptionQueryTask.java:190)
        at com.cmcc.open.task.service.PhoneAscriptionQueryTask.getHoursPhoneNum(PhoneAscriptionQueryTask.java:159)
        at com.cmcc.open.task.service.PhoneAscriptionQueryTask$$FastClassBySpringCGLIB$$fc62f4f8.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:737)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:84)
        at com.cmcc.open.task.aop.TaskAspect.taskAspectMethod(TaskAspect.java:67)
        at sun.reflect.GeneratedMethodAccessor155.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:672)
        at com.cmcc.open.task.service.PhoneAscriptionQueryTask$$EnhancerBySpringCGLIB$$24b5bb1a.getHoursPhoneNum(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.cmcc.open.task.utils.MyDetailQuartzJobBean.executeInternal(MyDetailQuartzJobBean.java:50)
        at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
        - locked <0x00000006d21b37b8> (a java.lang.Object)

   Locked ownable synchronizers:
        - None

 

 

最后定位,是沒有設置connectTimeout參數,默認是0,導致一直處於等待連接的狀態,卡了好幾天,導致task都沒運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM