22 04 2011
So I'm typing along, when all of a sudden, my system comes to a crawl. Windows go blank, apps don't respond to key presses. Normally, I wouldn't be surprised. But wait a moment; this isn't Windows or OSX; it's Linux. WTF is going on? I check top:
top - 08:04:54 up 32 days, 21:15, 15 users, load average: 6.06, 3.74, 1.92
Tasks: 205 total, 1 running, 203 sleeping, 0 stopped, 1 zombie
Cpu(s): 1.6%us, 1.3%sy, 0.0%ni, 0.0%id, 97.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4107088k total, 2512484k used, 1594604k free, 420900k buffers
Swap: 2654200k total, 450656k used, 2203544k free, 462820k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2569 root 20 0 140m 51m 12m S 3 1.3 322:06.24 Xorg
768 npsimons 20 0 190m 21m 10m S 1 0.5 5:36.34 gnome-panel
355 root 20 0 0 0 0 S 0 0.0 127:30.59 kcryptd
3454 npsimons 20 0 132m 8868 5948 S 0 0.2 4:51.28 metacity
4011 npsimons 20 0 134m 10m 6112 S 0 0.3 4:09.77 gnome-terminal
11960 root 30 10 2328 1180 488 D 0 0.0 0:02.63 sxid
The one thing that catches my eye is sxid, a security checking program I installed that automatically checks changes in status or permission on suid executables. But why is it running now, instead of late at night when I'm not around? Checking /etc/crontab, I find this:
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
WTF?! Who thought it was a good idea to start cron jobs at 06:30? And the entries for weekly and monthly are similar. Okay, simple, change them to slightly after midnight; if I'm still on the computer by then, that will be my indication to go to bed.
But then I have another thought: there's plenty that gets run from cron, and only sxid is causing problems; why? sxid is fairly new, but it should at least have a crontab that nice's it properly, right? No:
#!/bin/sh
SXID_OPTS=
if [ -x /usr/bin/sxid ]; then
/usr/bin/sxid ${SXID_OPTS}
fi
Programmers/packagers, here's a hint: even though your software may be "system" software that runs in the background, you still need to think of usability. Don't be like Symantec. This isn't Windows or iOS; our OS *can* walk and chew bubble gum at the same time. Don't abuse the privilege, and take a look at other cron scripts where use of nice(1) and ionice(1) are standard.
And yes, I should probably send a patch instead of just bitching. Just for reference, here's how I fixed it (which I partially cut and pasted from the debsums daily crontab):
#!/bin/sh
SXID_OPTS=
if [ -x /usr/bin/sxid ]; then
nice -n 19 ionice -c 3 /usr/bin/sxid ${SXID_OPTS}
fi
posted at: 08:50 | path: | permanent link to this entry