[MCCS] Linux 환경에서 TimeoutException으로 인해 MCCS Agent 정상기동 안되는 현상

1. Environment   

    OS : Linux

    MCCS : 모든버전 해당

 2. Symptoms

    1) MCCS 기동 후 System상 Agent status는 정상이나, 실제로 MCCS는 되지 않을때.

    2) mccs.log에는 아무런 로그도 찍히지 않으며, Trace.log에만 TimeoutException 발생.

19/07/08-15:37:09,798 | d0cb56f9d8 | .RuntimeExecute: 363 | DEBUG | /opt/MCCS/bin/plugins/com.mantech.system.linux_4.4.6.201903040214/scripts/systemUtil.sh existPackage psmisc :TimeoutException
19/07/08-15:37:09,799 | d0cb56f9d8 | .RuntimeExecute: 364 | TRACE | java.util.concurrent.TimeoutException
java.util.concurrent.TimeoutException
        at java.util.concurrent.FutureTask.get(FutureTask.java:205)
        at com.mantech.system.cmd.RuntimeExecute.execute(RuntimeExecute.java:346)
        at com.mantech.system.cmd.RuntimeExecute.execute(RuntimeExecute.java:101)
        at com.mantech.system.utility.SysUtil.existPackage(SysUtil.java:686)
        at com.mantech.mccs.factory.agent.disk.LinuxDiskCategory.installedRequiredPackage(LinuxDiskCategory.java:136)
        at com.mantech.mccs.factory.agent.disk.LinuxDiskCategory.<init>(LinuxDiskCategory.java:66)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:237)
        at 

....

 3. Cause

    – MCCS 기동 script의 timeout에 의해 발생.

    – 발견한 case : MCCS_Agent가 기동하면서 “rpm -qa|grep ${NAME}”으로 psmisc를 검출하는 과정에서 Timeout 발생

                             Agent first 기동시 RuntimeExcuteTimeout이 변경되어도 default인 30으로 적용되어 30초 내에 기동 script가 다 돌지 않아 발생 된 현상

    – 검색 방법 : /opt/MCCS/bin/plugins/com.mantech.system.linux_*/scripts/systemUtil.sh 의 ‘existPackage()’
                         rpm -qa|grep ${NAME}

 4. Solution

    – rpm -qa 명령 간소화

      /opt/MCCS/bin/plugins/com.mantech.system.linux_*/scripts/systemUtil.sh 의 “rpm -qa | grep ${NAME}”

      rpm -qa로 전체 rpm 조회 후 grep 하는것 보다는 rpm -q로 특정 rpm만 검출하는 것이 응답속도에서 우월한 점이 있어 수정.

 5. Workaround

    – Agent 기동속도 향상에 도움이 되므로 4.4.7 이전버전에서는 기본적으로 해당 부분 수정하는 것을 권장.

    – 추가 확인결과 해당 부분에서는 psmisc 외에는 다른 rpm 검출하지 않음.