본문 바로가기

IT-Consultant

개발장비에서 hang 현상 발생

이런 상황이 개발장비에서 쉽게 발생한다.
예전에 이런 문제로 vsearch.jar 파일을 수정해서 다른 사이트에 적용했는데 그때 효과가 있었다.
그런데 k2.jar는 좀 다른 것 같아서 많이 테스트를 해봐야겠다.

"Thread-888" prio=5 tid=0x00c32cd0 nid=0x50a runnable [0xcc67e000..0xcc67fc28]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
        - locked <0xe175f448> (a com.verity.xmit.XmitInputStream)
        at com.verity.xmit.encrypt.DecryptedInputStream.read(Unknown Source)
        - locked <0xe175f448> (a com.verity.xmit.XmitInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at com.verity.xmit.XmitInputStream.buildString(Unknown Source)
        - locked <0xe175f448> (a com.verity.xmit.XmitInputStream)
        at com.verity.xmit.XmitInputStream.readString(Unknown Source)
        at com.verity.xmit.k2.UridiumInvoker.sendParameter(Unknown Source)
        at com.verity.xmit.k2.UridiumInvoker.invokeXmitMethod(Unknown Source)
        at com.verity.net.k2.K2Connection.ping(Unknown Source)
        at com.verity.net.Connection.checkResource(Unknown Source)
        at com.verity.resource.ResourcePool.testAndLockResource(Unknown Source)
        - locked <0xe175edc8> (a com.verity.net.k2.K2Connection)
        at com.verity.resource.ResourcePool.newResource(Unknown Source)
        at com.verity.net.Connection.getConnection(Unknown Source)
        at com.verity.net.Connection.getConnection(Unknown Source)
        at com.verity.search.util.JSDispenser.getConnResource(Unknown Source)
        - locked <0xe17567b0> (a com.verity.search.util.JSDispenser)
        at com.verity.search.ProcessK2Operation.submit(Unknown Source)
        at com.verity.search.VSearch.getPSearch(Unknown Source)
        at com.verity.search.VSearch.getResult(Unknown Source)
        at keris.edunet.search.service.search.impl.k2.K2CollectionSearchHelper.search(K2CollectionSearchHelper.java:150)
        at keris.edunet.search.service.search.impl.SearchHelperThread.run(SearchHelperThread.java:89)



아래 read 함수에서 blocking되어서 모든 쓰레드가 hang에 걸린 것이다.
왜 그랬을까?

    private synchronized String buildString(String s)
        throws IOException
    {
        buf.reset();
_L2:
        if(_currentBufPos != _bufSize)
            break MISSING_BLOCK_LABEL_98;
        _bufSize = read(_buffer);
        if(_bufSize != -1)
            break MISSING_BLOCK_LABEL_93;
        if(buf.size() == 0)
            return null;
        return buf.toString(s);
        UnsupportedEncodingException unsupportedencodingexception;
        unsupportedencodingexception;
        throw new RuntimeException("Unsupported encoding scheme - " + unsupportedencodingexception.getMessage());
        _currentBufPos = 0;
        int i;
        i = _currentBufPos;
        byte byte0;
        do
            byte0 = _buffer[_currentBufPos++];
        while(byte0 != 0 && _currentBufPos < _bufSize);
        if(byte0 != 0)
            break MISSING_BLOCK_LABEL_213;
        buf.write(_buffer, i, _currentBufPos - 1 - i);
        if(buf.size() == 0)
            return null;
        return buf.toString(s);
        UnsupportedEncodingException unsupportedencodingexception1;
        unsupportedencodingexception1;
        throw new RuntimeException("Unsupported encoding scheme - " + unsupportedencodingexception1.getMessage());
        buf.write(_buffer, i, _currentBufPos - i);
        if(true) goto _L2; else goto _L1
_L1:
    }