Howdy-

We've recently been seeing our clamd processes run very hot (spiking up to 85% of the CPU as reported by prtstat and top) on two different Solaris 9 boxes. For example, here's a few lines from prtstat -L (showing the two clamav threads who are together eating 66% of the CPU) .

PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/LWPID
18447 root       61M   60M run      0    0   0:27:51  34% clamd/14
18447 root       61M   60M cpu0    20    0   0:25:40  32% clamd/22

Both machines are running 0.88.2 clamds being fed by exim. We'll upgrade to 88.4 shortly, but I haven't seen anything in the release notes that mentions this issue. I've looked at all of the obvious things I can think of (we are not swapping due to lack of memory as far as I can tell, not out of any resources like file descriptors, and so on) so I was hoping someone here could offer some advice on any other avenues to pursue. I've even done things like moving the temp directory to a tmpfs filesystem, but that hasn't helped the load any.

I've included gdb backtraces for all threads below and also a copy of the truss counts for the process so you can see which system calls are being made (and which are giving errors, probably normally). I've included our non-default config options below. I've also included an ldd of the binary so you can see that we have it linked against almost all standard Solaris libs (all of which I think are patched properly, let me know if there is something I should check there).

If there is anything else I should be checking, please let me know. Thanks for any help you can offer.

     -- dNb

GDB:

(gdb) info thread
  5 LWP 63  0xff0858f4 in __lwp_park () from /usr/lib/libthread.so.1
  4 LWP 14  0xff330d98 in getline_from_mbox ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
  3 LWP 62  0xff0858f4 in __lwp_park () from /usr/lib/libthread.so.1
  2 LWP 22  0xff309c98 in cli_ac_scanbuff ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
* 1 LWP 1  0xff01c934 in _so_accept () from /usr/lib/libc.so.1
(gdb) bt
#0  0xff01c934 in _so_accept () from /usr/lib/libc.so.1
#1  0x0001a95c in acceptloop_th ()
#2  0x00018514 in localserver ()
#3  0x00017be0 in clamd ()
#4  0x00016758 in main ()
(gdb) thread 2
[Switching to thread 2 (LWP 22)]#0  0xff309c98 in cli_ac_scanbuff ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
(gdb) bt
#0  0xff309c98 in cli_ac_scanbuff ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#1  0xff30bd50 in cli_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#2  0xff31cca8 in cli_scanraw ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#3  0xff31d864 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#4  0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#5  0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#6  0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#7  0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#8  0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#9  0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#10 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#11 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#12 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#13 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#14 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#15 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#16 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#17 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#18 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#19 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#20 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#21 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#22 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#23 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#24 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#25 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#26 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#27 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#28 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#29 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#30 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#31 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#32 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#33 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#34 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#35 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#36 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#37 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#38 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#39 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#40 0xff31da14 in cl_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#41 0xff31db38 in cl_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#42 0x0001b2e0 in dirscan ()
#43 0x0001b7b8 in scan ()
#44 0x000186f4 in command ()
#45 0x000197d0 in scanner_thread ()
#46 0x00019470 in thrmgr_worker ()
(gdb) thread 3
[Switching to thread 3 (LWP 62)]#0  0xff0858f4 in __lwp_park ()
   from /usr/lib/libthread.so.1
(gdb) bt
#0  0xff0858f4 in __lwp_park () from /usr/lib/libthread.so.1
#1  0xff082ba4 in cond_wait_queue () from /usr/lib/libthread.so.1
#2  0xff08311c in cond_wait_common () from /usr/lib/libthread.so.1
#3  0xff0835ac in _ti_cond_timedwait () from /usr/lib/libthread.so.1
#4  0xff0835e0 in cond_timedwait () from /usr/lib/libthread.so.1
#5  0xff083620 in pthread_cond_timedwait () from /usr/lib/libthread.so.1
#6  0x000193b8 in thrmgr_worker ()
(gdb) thread 4
[Switching to thread 4 (LWP 14)]#0  0xff330d98 in getline_from_mbox ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
(gdb) bt
#0  0xff330d98 in getline_from_mbox ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#1  0xff32b364 in parseEmailFile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#2  0xff32aa98 in cli_parse_mbox ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#3  0xff32a408 in cli_mbox ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#4  0xff31cb00 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#5  0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#6  0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#7  0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#8  0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#9  0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#10 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#11 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#12 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#13 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#14 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#15 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#16 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#17 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#18 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#19 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#20 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#21 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#22 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#23 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#24 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#25 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#26 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#27 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#28 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#29 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#30 0xff31daa4 in cli_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#31 0xff31b134 in cli_scandir ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#32 0xff31cb90 in cli_scanmail ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#33 0xff31d4d8 in cli_magic_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#34 0xff31da14 in cl_scandesc ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#35 0xff31db38 in cl_scanfile ()
   from /arch/daemons/packages/clamav-0.88.2/lib/libclamav.so.1
#36 0x0001b2e0 in dirscan ()
#37 0x0001b7b8 in scan ()
#38 0x000186f4 in command ()
#39 0x000197d0 in scanner_thread ()
#40 0x00019470 in thrmgr_worker ()

TRUSS:

truss -c -p 18447
^Csyscall               seconds   calls  errors
read                     .601    6979
write                    .227    5305
open                     .048    1479      2
close                    .036    1594
unlink                   .047     432
time                     .001     119
chmod                    .004     172
stat                     .013     542    188
lseek                    .017    1636
getpid                   .005     198
fstat                    .006     442
access                   .001      49
dup                      .001      99
times                    .053    6016
ioctl                    .002     272    272
umask                    .000      10
fcntl                    .004     408
lwp_park                 .002      73      2
lwp_unpark               .001      71
rmdir                    .012     437    172
mkdir                    .010     281
putmsg                   .000      10
poll                     .006     312
lstat                    .024     893
fchmod                   .000       5
sigprocmask              .001     104
setustack                .000       1
mmap                     .005      94
munmap                   .003      94
lwp_create               .000       1
lwp_exit                 .000       2
lwp_continue             .000       1
lwp_kill                 .000       1      1
llseek                   .004     443
door_info                .000      10
door_call                .000      10
lwp_schedctl             .000       1
getdents64               .012     781
lstat64                  .005     178    178
fstat64                  .013     952
accept                   .011      49
recvmsg                  .001      49
send                     .002      49
                     --------  ------   ----
sys totals:             1.194   30654    815
usr time:             158.677
elapsed:              114.170

CONFIG:

LogFile /priv/log/clamd/clamd.log
LogFileMaxSize 20M
LogTime
LogSyslog
LogFacility LOG_MAIL
TemporaryDirectory /var/clamd
DatabaseDirectory /arch/daemons/packages/clamav-0.88.2/share/clamav
LocalSocket /etc/exim/clamd-socket
FixStaleSocket
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
StreamMaxLength 20M
MaxThreads 20
ArchiveBlockMax

LDD:

# ldd ../sbin/clamd
libclamav.so.1 => /arch/daemons/packages/ clamav-0.88.2/lib/libclamav.so.1
        libz.so.1 =>     /usr/lib/libz.so.1
        libbz2.so.1 =>   /usr/lib/libbz2.so.1
        libgmp.so.3 =>   /arch/gnu/packages/gmp-4.0/lib/libgmp.so.3
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libpthread.so.1 =>       /usr/lib/libpthread.so.1
        libresolv.so.2 =>        /usr/lib/libresolv.so.2
        libc.so.1 =>     /usr/lib/libc.so.1
        libdl.so.1 =>    /usr/lib/libdl.so.1
        libmp.so.2 =>    /usr/lib/libmp.so.2
        libthread.so.1 =>        /usr/lib/libthread.so.1
        /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1

_______________________________________________
http://lurker.clamav.net/list/clamav-users.html

Reply via email to