[Bug 248537] procstat -e/kvm_getenvv() fails for specific processes
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Aug 8 14:41:41 UTC 2020
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=248537
Bug ID: 248537
Summary: procstat -e/kvm_getenvv() fails for specific processes
Product: Base System
Version: 12.1-RELEASE
Hardware: Any
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: kern
Assignee: bugs at FreeBSD.org
Reporter: ag-freebsd at muc.de
While implementing *BSD platform support for sysutils/py-psutils, I've
encountered strange behaviour when using either the libprocstat or kvm
interface to retrieve the environ for a foreign process on the system:
Both kvm_getenvv() and procstat_getenvv() return ENOMEM on some systems.
This happens repeatingly reproducable e.g. for the X11 Xorg server process; it
can already be seen by using system utilities as well:
» pgrep Xorg
1401
» sudo ps -e -p 1401
PID TT STAT TIME COMMAND
1401 v0 S 646:37.30 /usr/local/bin/Xorg :0 -listen tcp
(shows no environment and swallows the error)
» sudo procstat -e 1401
PID COMM ENVIRONMENT
procstat: sysctl(kern.proc.env): Cannot allocate memory
1401 Xorg -
I've tried to track this down and searched for similar bug reports, but all
suggestions mentioned there do not work.
1) Both library functions internally use the sysctl() interface to retrieve the
information from the kernel. sysctl() uses _locked memory_ for transferring the
data. So, a resource limit may be hit.
But even if I raise the locked memory soft and hard limits (``ulimit -l -H
...´´, the error stays.
2) Even if I raise **vm.max_wired** to make sure no global limit is reached,
the error stays.
There is another scenario which trigges the problem:
When using the 'Cirrus CI' continuous build platform (which runs on Google
compute engine to my knownledge), there is also a process whose environment
cannot be retrieve with the system interfaces kvm_getenvv() /
procstat_getenvv():
sysctl vm.max_wired vm.stats.vm.v_wire_count
vm.max_wired: 331490
vm.stats.vm.v_wire_count: 136164
limits
Resource limits (current):
cputime infinity secs
filesize infinity kB
datasize 33554432 kB
stacksize 524288 kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked 131072 kB
maxprocesses 8499
openfiles 116856
sbsize infinity bytes
vmemoryuse infinity kB
pseudo-terminals infinity
swapuse infinity kB
kqueues infinity
umtxp infinity
ps auxm
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 25598 0.0 7.0 990596 291548 u0 S+ 23:58 0:12.63
./cirrus-ci-agent -task-id 5900109814693888 -client-token
d5950e87a4cc4ce89436b07589944d60 -server-token abae919382e6411787e4d67fc60dd527
-api-endpoint grpc.cirrus-ci.com:443
root 1 0.0 0.0 9788 284 - ILs 23:52 0:00.01 /sbin/init --
root 453 0.0 0.0 10456 1460 - Ss 23:52 0:00.00 /sbin/devd
[....]
root 22 0.0 0.0 12320 1596 u0 Is+ 23:52 0:00.04 sh /etc/rc
autoboot
root 25548 0.0 0.0 12320 1848 u0 I+ 23:58 0:00.00 sh /etc/rc
autoboot
[....]
root 0 0.0 0.0 0 320 - DLs 23:52 0:00.00 [kernel]
[....]
procstat -e 22
procstat: sysctl(kern.proc.env): Cannot allocate memory
PID COMM ENVIRONMENT
22 sh -
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list