the logic (code? usage?) of system(int fd, char *cmd) is ugly. thanks for fixing, cinap.
charies may be speaking right point, because the dns server is running only for my home use. only my family uses the dns service. my home network is very simple.I have never used /net.alt for that. the dns had been running on file server and sometimes (once a month or so) failed into trouble. a few weeks ago, I separated it from file server so that I can see the trouble really comes from dns. the contents of /proc/N/fs are shown below. it seems /dev/null is not the criminal as charies suggested. how to find fd leakage? thanks in advance io% ps|grep dns arisawa 248 0:00 0:00 348K Await dns arisawa 249 0:00 0:00 14584K Pread dns arisawa 250 0:12 0:12 14576K Pread dns io% cat /proc/^(248 249 250)^/fd /usr/arisawa 0 r M 8 (0000000000000005 0 00) 8192 1 /dev/cons 1 w c 0 (0000000000000002 0 00) 0 1 #c/cons 2 w c 0 (0000000000000002 0 00) 0 193 #c/cons 3 r c 0 (000000000000000f 0 00) 0 4 /dev/random 4 w M 22 (000000000000ce7e 54050 40) 8192 1098023 /sys/log/dns 5 r c 0 (0000000000000001 0 00) 0 6873616 /dev/bintime 6 r M 22 (000000000000929e 3098 00) 8192 10949 /lib/ndb/local 7 r M 22 (000000000000929b 47 00) 8192 10242 /lib/ndb/common 8 r I 0 (0000000000000004 3 00) 0 127 /net/ndb 9 rw | 0 (0000000000000fc1 0 00) 65536 3954 #|/data 11 w s 0 (0000000000000009 0 00) 0 2 #s/dns /usr/arisawa 0 r M 8 (0000000000000005 0 00) 8192 1 /dev/cons 1 w c 0 (0000000000000002 0 00) 0 1 #c/cons 2 w c 0 (0000000000000002 0 00) 0 193 #c/cons 3 r c 0 (000000000000000f 0 00) 0 4 /dev/random 4 w M 22 (000000000000ce7e 54050 40) 8192 1098023 /sys/log/dns 5 r c 0 (0000000000000001 0 00) 0 6873816 /dev/bintime 6 r M 22 (000000000000929e 3098 00) 8192 10949 /lib/ndb/local 7 r M 22 (000000000000929b 47 00) 8192 10242 /lib/ndb/common 8 r I 0 (0000000000000004 3 00) 0 127 /net/ndb 9 rw | 0 (0000000000000fc1 0 00) 65536 3954 #|/data 11 w s 0 (0000000000000009 0 00) 0 2 #s/dns 12 rw I 0 (000000000002002d 0 00) 0 3362 /net/udp/1/data /usr/arisawa 0 r M 8 (0000000000000005 0 00) 8192 1 /dev/cons 1 w c 0 (0000000000000002 0 00) 0 1 #c/cons 2 w c 0 (0000000000000002 0 00) 0 193 #c/cons 3 r c 0 (000000000000000f 0 00) 0 4 /dev/random 4 w M 22 (000000000000ce7e 54050 40) 8192 1098023 /sys/log/dns 5 r c 0 (0000000000000001 0 00) 0 6873824 /dev/bintime 6 r M 22 (000000000000929e 3098 00) 8192 10949 /lib/ndb/local 7 r M 22 (000000000000929b 47 00) 8192 10242 /lib/ndb/common 8 r I 0 (0000000000000004 3 00) 0 127 /net/ndb 9 rw | 0 (0000000000000fc1 0 00) 65536 3954 #|/data 11 w s 0 (0000000000000009 0 00) 0 2 #s/dns 12 rw I 0 (000000000002002d 0 00) 0 3362 /net/udp/1/data io% > 2016/02/17 7:24、Charles Forsyth <[email protected]> のメール: > > > On 16 February 2016 at 15:52, arisawa <[email protected]> wrote: > > I have observed warning messages from dns server: > dns 30792: warning process exceeded 100 file descriptors > dns 30888: warning process exceeded 200 file descriptors > > It's worth noting that this message doesn't necessarily mean you've got a > file descriptor leak. > It might, but at the start it just means that a process (or process group > sharing a file descriptor group) has many file descriptors open. > That could happen if a server with many clients has a file descriptor per > client and then client requests open some more. > > ndb/dns in particular will try user-level requests in parallel, and those in > turn can lead to several concurrent > queries to various name servers at a given level (root itself has 13). Web > browser clients will fetch page > elements concurrently. That's why it's useful to check the /proc/N/fd file to > try to see what they are. > (Not just for ndb/dns, but for other applications that provoke the message.) > Arguably, if you're using the system in a real, Internet-facing application, > the warning message might > be obsolete, compared to the time when even 100 clients was a big network.
