Public bug reported:
I'm using Ubuntu trusty, specifically Ubuntu 14.04.3 LTS
I have package xinetd version 1:2.3.15-3ubuntu1.
I think this problem also reproduces in latest xinetd on xenial.
Repro steps:
1. Run /etc/init.d/xinetd status
EXPECTED BEHAVIOR
The service-status script for xinetd outputs some information about whether or
not the service is currently healthy.
ACTUAL BEHAVIOR
The service-status script for xinetd outputs all the information it has ever
gathered since the OS was first installed about the internal state of xinetd,
replaying the output of each internal state dump sequentially.
If you do this a lot, say once a minute for a few months, each call to
"/etc/init.d/xinetd status" may end up printing hundreds of megabytes of
data from a file.
What's going on on the hood:
(1) First, the service-status script (/etc/init.d/xinetd) checks whether the
xinetd process is running; if no, it returns an error code. Assuming the
process is running, the status script
sends a SIGUSR1 signal to the running xinetd process, which per the manual page
"causes an internal state dump (the default dump file is /var/run/xinetd.dump;
to change the filename, edit config.h and recompile)."
(2) The manual page isn't explicit about this, but what happens is that
xinetd *appends* a bunch of state information, about 90 lines of text
comprising 2 kilobytes, to the file /var/run/xinetd.dump (this file
location is compiled in).
(3) Next, the service-status script reads that file ("cat
/var/run/xinetd.dump").
This prints the whole file out to terminal or the calling process. If
you have run /etc/init.d/xinetd status, say, nine times since you
installed your OS, the output of your tenth "/etc/init.d/xinetd status"
will be about 20 kilobytes / about 900 lines, containing each state dump
that has ever been produced, one at a time.
SURPRISING SIDE EFFECTS
If you invoke this script via "/usr/sbin/service --status-all", that wrapper
script will read all of /var/run/xinetd.dump into a bash variable and check
whether it is nonempty as part of describing whether all installed
init-script-managed services on the system are running.
If you are running automated monitoring which calls "service --status-
all" once a minute in order to measure which services are installed &
running over time, you will notice that performance of your system
gradually degrades, with huge amounts of I/O being spent repeatedly
reading the entire file of all xinetd dumps for all time into a bash
variable.
PROPOSED FIX
It seems like maybe, any of the following should happen
(a) the xinetd package configures logrotate to periodically rotate old
/var/run/xinetd.dump files
(b) the xinetd service changes its response to SIGUSR1 to *write* state to
file /var/run/xinetd.dump instead of *appending* state to it (some significant
side effects! maybe users want that history!)
(c) the status script /etc/init.d/xinetd changes its implementation of "report
service health" to check health in some way other than dumping internal xinetd
state then printing the history of all past dumps.
** Affects: xinetd (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1678191
Title:
xinetd service status script appends to /var/run/xinetd.dump with no
rotation mechanism
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/xinetd/+bug/1678191/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs