ldd leaves the machine unresponsive

jhell jhell at DataIX.net
Thu Mar 18 15:43:14 UTC 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On Wed, 17 Mar 2010 12:32, Anton Shterenlikht wrote:
In Message-Id: <20100317163230.GJ87732 at mech-cluster241.men.bris.ac.uk>

> Just updated to ia64 r205248
>
> If my problem is due to my mis-configuration,
> I apologise in advance.
>
> I run this shell script after each upgrade
> and 'make delete-old-libs' to check
> if any shared objects need to be rebuilt:
>
> <start script>
>
> #!/bin/sh
>
> for file in `find /bin /sbin /usr/bin /usr/sbin /usr/lib /usr/libexec /usr/local -name "*"`
> do
>        echo $file
>        ldd $file >> /root/ldd_results 2> /dev/zero
> done
>
> <end script>
>

This will probably do closer to what you actually would want to look for.

Writing to /dev/zero ... I don't know never tried it since /dev/null is 
usually the standard place to throw trash.

#!/bin/sh
for file in `find /*bin /usr/*bin /usr/lib* /usr/local/*bin -type f` do
 	echo $file
 	ldd $file >>/root/ldd_results 2>/dev/null
done

The problem with your script is that it finds most files that it can not 
or is not useful to run ldd on and leaves you junk in return.

It might be more useful if you searched for dynamically linked ELF 
binaries to run ldd against like the following.

=== Script starts here ===
#!/bin/sh

SEARCHPATH="/*bin /usr/*bin /usr/lib* /usr/local/*bin"

trap 'exit 1' 2

check_libs() {
for spath in $SEARCHPATH; do
         for ifelf in `find $spath -type f`; do
                 ldd `file $ifelf | grep dynamically | cut -f1 -d:`
         done
done
}

check_libs 2>/dev/null
=== Script ends here ===

The above will find all type ELF * that are dynamically linked within the 
SEARCHPATH variable and run ldd on them and print the results to stdout.

Obviously since you are going to have thousands of files being questioned, 
stdout is not going to be useful.

So with the about stated:
save the script to: checklibs.sh
run with: "sh checklibs.sh >/root/checklibs_output"
or: "script /root/checklibs_output checklibs.sh"

> After the upgrade to r205248, the script
> freezes at seemingly random points.
>

Unneeded disk usage & execution.

> I can still ssh to the machine (using keys), i.e.
> I see the welcome message, but cannot get to the console prompt.

Of course... to many open files or processes in wait. SSH already has the 
information it needs loaded into memory, that's why you can get sort-of-in

ZFS file-system perhaps ?

>
> On the serial console I cannot get the prompt
> after entering the root password.
>

See above.

> I have top(1) running interactively in another window.
> The sh process is in "getblk" state, and ignores kill -9.
> But there's no ldd process.
>
> And shutdown requests are also ignored:
>
> # shutdown -r now
> Shutdown NOW!
> shutdown: [pid 8019]
> #
> and nothing happens after that
>
> So I have to do a cold reset via MP.
>
> On ia64 r204322, this script causes no problems.
>
> Please advise
>

The above edited script should help to limit disk usage and too many open 
processes that causes your machine to bog down like that. This script does 
have its limitations and there is one bug in it... Ill let you figure out 
how to get rid of that bug but it really does not effect the intended 
output so I left it alone and sent error output to fd/2.

The limitations you'll find is how many files that ldd(1) or file(1) can 
handle at one time. But if you specify specific paths like already in 
SEARCHPATH then you will most likely never see this unless the files in 
/*bin grow to be over max number of files that file(1) or ldd(1) can 
handle at one time. Shortly said... use direct paths or short globs like 
above.

> many thanks
> anton
>

A final note you might want to just install sysutils/libchk and run that.

Standard Disclaimer: NONE OF THIS CONTAINED HEREIN "THIS MESSAGE" EXCUSES 
ANY OF THE UNEXPLAINED DISK LOCKING THAT IS GOING ON AND THE INFORMATION 
FOR WHICH IT MAY CONTAIN BECOMING UNAVAILABLE AT ANY POINT IN TIME DURING 
THE ORIGINAL RUN OF THE FIRST SCRIPT OR THE SECOND SCRIPT THAT WAS POSTED 
EITHER AS A ATTACHMENT OR IN-LINE.

;) JK!

Good Luck.

- -- 

  jhell

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)

iQEcBAEBAgAGBQJLokboAAoJEJBXh4mJ2FR+njQH/12zvjvwkBCEuWCzSg0O6mXA
kFR9XeF7TeFyAgBWTNWblmU6e1QRURI5V6qvR3oG+58jngbvSmAyZRbw3tz+mf2U
TJGhhnFYMph8PLDVmtVfYGf2V3UQXxcmDNtnJLsQT3i2RyRurIDFmtNf5GvBOw3b
6jpTF1xpZfJIfQMSxgQ0NhGFPQcYZCNRZy5Yh+5q7JeKSBx73btgnFSJ9IGSQfZj
xFCxELWDQOc20/M2pIRQ5z9+OyeSP0J7XrX6g0TlofJ5IxcCqNiQ8pruvKUm8/S7
AkYIgh8kqOSGhxOkXN4RqyHN537u6QLATJwMed2jgy8TBj/L+51Y+Ni1ceWdVaU=
=+oRv
-----END PGP SIGNATURE-----


More information about the freebsd-current mailing list