*****************************************************************************
* Description: Troubleshoot SQL*Plus login hanging via truss on AIX platform
* Date: 11:56 PM EST, 04/01/2018
*****************************************************************************
<1> After launching "sqlplus username/password" on AIX command line, the interface hanging for a long time before logging in:
|
|__ o. In addition, "tnsping" and "lsnrctl" hanging for a long period as same.
<2> Using "truss" to trace the system call for command "tnsping database_tns" in AIX system, and review dump file "truss_tnsping.lis":
|
|__ $ truss -o /home/oracle/truss_tnsping.lis -f -e -a -d tnsping database_tns
|
|__ $ strace lsnrctl status ....... This is the command for RHEL.
|
|__ o. Within the output, we can see process sleep at "/etc/netsvc.conf" for 13 seconds. The cause is DNS naming resolving method is not optimized.
|
|__ o. The /etc/netsvc.conf file is specifying the ordering of name resolution for gethostbyname, gethostbyname2, gethostbyaddr routines and alias resolution for the "sendmail".
38797490: 64815333: 0.6711: kopen("/etc/resolv.conf", O_RDONLY) = 8
38797490: 64815333: 0.6713: kioctl(8, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
38797490: 64815333: 0.6714: kioctl(8, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
38797490: 64815333: kread(8, " n a m e s e r v e r ".., 4096) = 150
38797490: 64815333: kread(8, " n a m e s e r v e r ".., 4096) = 0
38797490: 64815333: 0.6718: statx("/etc/resolv.conf", 0x0FFFFFFFFFFF66E8, 176, 0) = 0
38797490: 64815333: 0.6719: close(8) = 0
38797490: 64815333: 0.6721: socket(1, 1, 0) = 8
38797490: 64815333: 0.6723: kfcntl(8, F_SETFD, 0x0000000000000001) = 0
38797490: 64815333: 0.6724: connext(8, 0x0FFFFFFFFFFF61B8, 1025) Err#2 ENOENT
38797490: 64815333: 0.6725: close(8) = 0
38797490: 64815333: 0.6727: kopen("/etc/netsvc.conf", O_RDONLY) = 8
38797490: 64815333: 0.6729: kioctl(8, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
38797490: 64815333: 0.6730: kioctl(8, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
38797490: 64815333: kread(8, " # @ ( # ) 4 3 ".., 4096) = 4096
38797490: 64815333: kread(8, " o n a n d r e s o l".., 4096) = 620
38797490: 64815333: kread(8, " o n a n d r e s o l".., 4096) = 0
38797490: 64815333: 0.6735: close(8) = 0
38797490: 64815333: 0.6737: kopen("/etc/irs.conf", O_RDONLY) Err#2 ENOENT
38797490: 64815333: 0.6738: _thread_self() = 64815333
38797490: 64815333: 0.6740: getdomainname(0x09001000A00DD7D0, 1024) = 0
38797490: 64815333: 0.6741: _thread_self() = 64815333
38797490: 64815333: 0.6743: _thread_self() = 64815333
38797490: 64815333: 0.6744: __libc_sbrk(0x0000000000010020) = 0x0000000110389980
38797490: 64815333: 0.6746: _thread_self() = 64815333
38797490: 64815333: 0.6748: getdomainname(0x09001000A00DD7D0, 1024) = 0
38797490: 64815333: 0.6749: _thread_self() = 64815333
38797490: 64815333: 0.6750: _thread_self() = 64815333
38797490: 64815333: 0.6752: _thread_self() = 64815333
38797490: 64815333: 0.6753: kopen("/etc/hesiod.conf", O_RDONLY) Err#2 ENOENT
38797490: 64815333: 0.6755: _thread_self() = 64815333
38797490: 64815333: 0.6756: getdomainname(0x09001000A00DD7D0, 1024) = 0
38797490: 64815333: 0.6757: _thread_self() = 64815333
38797490: 64815333: 0.6759: _thread_self() = 64815333
38797490: 64815333: 0.6760: _thread_self() = 64815333
38797490: 64815333: 0.6761: getdomainname(0x09001000A00DD7D0, 1024) = 0
38797490: 64815333: 0.6763: _thread_self() = 64815333
38797490: 64815333: 0.6764: _thread_self() = 64815333
38797490: 64815333: 0.6765: _thread_self() = 64815333
38797490: 64815333: 0.6767: getdomainname(0x09001000A00DD7D0, 1024) = 0
38797490: 64815333: 0.6768: _thread_self() = 64815333
38797490: 64815333: 0.6769: _thread_self() = 64815333
38797490: 64815333: 0.6771: __libc_sbrk(0x0000000000010020) = 0x00000001103999A0
38797490: 64815333: 0.6772: socket(2, 2, 0) = 8
38797490: 64815333: 0.6774: getsockopt(8, 65535, 4104, 0x0FFFFFFFFFFF51C4, 0x0FFFFFFFFFFF51C0) = 0
38797490: 64815333: 0.6775: connext(8, 0x09001000A0023838, 16) = 0
38797490: 64815333: 0.6777: _esend(8, 0x0FFFFFFFFFFF60D0, 47, 0, 0x0000000000000000) = 47
38797490: 64815333: 0.6778: _poll(0x0FFFFFFFFFFF5290, 1, 5000) = 1
38797490: 64815333: 0.6857: _enrecvfrom(8, 0x0FFFFFFFFFFF7400, 1024, 0, 0x0FFFFFFFFFFF5A50, 0x0FFFFFFFFFFF5278, 0x0000000000000000) = 123
38797490: 64815333: 0.6859: _esend(8, 0x0FFFFFFFFFFF60D0, 31, 0, 0x0000000000000000) = 31
38797490: 64815333: 0.6860: _poll(0x0FFFFFFFFFFF5290, 1, 5000) = 1
38797490: 64815333: 0.6931: _enrecvfrom(8, 0x0FFFFFFFFFFF7400, 1024, 0, 0x0FFFFFFFFFFF5A50, 0x0FFFFFFFFFFF5278, 0x0000000000000000) = 31
38797490: 64815333: 0.6932: close(8) = 0
38797490: 64815333: 0.6934: socket(2, 2, 0) = 8
38797490: 64815333: 0.6935: _esendto(8, 0x0FFFFFFFFFFF60D0, 31, 0, 0x09001000A0023848, 16, 0x0000000000000000) = 31
24051790: 56754361: 2.6656: kread(8, "\0 -\0\006\0\0\0\0\003 ;".., 8208) (Sleeping...)
38797490: 64815333: 2.6937: _poll(0x0FFFFFFFFFFF5290, 1, 5000) (sleeping...)
38797490: 64815333: 2.6937: _poll(0x0FFFFFFFFFFF5290, 1, 5000) = 0
38797490: 64815333: 5.6939: close(8) = 0
38797490: 64815333: 5.6940: socket(2, 2, 0) = 8
38797490: 64815333: 5.6942: _esendto(8, 0x0FFFFFFFFFFF60D0, 31, 0, 0x09001000A0023858, 16, 0x0000000000000000) = 31
38797490: 64815333: 5.6943: _poll(0x0FFFFFFFFFFF5290, 1, 5000) = 1
38797490: 64815333: 5.6949: _enrecvfrom(8, 0x0FFFFFFFFFFF7400, 1024, 0, 0x0FFFFFFFFFFF5A50, 0x0FFFFFFFFFFF5278, 0x0000000000000000) = 106
38797490: 64815333: 5.6950: close(8) = 0
<3> Solution:
|
|__ o. Adding following line within "/etc/netsvc.conf".
|
|
| hosts = local,bind4
|
|
|__ o. This parameter will tell db connection to seek local /etc/hosts to resolve IPv4 only, instead of going to DNS server to resolve the name, which takes time.
Your Comments