mirror of
https://github.com/nicolargo/glances.git
synced 2024-12-01 05:54:46 +03:00
First rush for the issue #1105. Bug with Process IO when Glances starts
This commit is contained in:
parent
92c9b2d9a8
commit
fc7106c012
1
NEWS
1
NEWS
@ -17,6 +17,7 @@ Enhancements and new features:
|
|||||||
* Remove graph export from Glances #1206
|
* Remove graph export from Glances #1206
|
||||||
* Add a code of conduct for Glances project's participants #1211
|
* Add a code of conduct for Glances project's participants #1211
|
||||||
* Context switches bottleneck identification #1212
|
* Context switches bottleneck identification #1212
|
||||||
|
* Take advantage of the PSUtil issue #1025 (Add process_iter(attrs, ad_value)) #1105
|
||||||
|
|
||||||
Bugs corrected:
|
Bugs corrected:
|
||||||
|
|
||||||
|
@ -149,6 +149,8 @@ class GlancesProcesses(object):
|
|||||||
return int(f.read())
|
return int(f.read())
|
||||||
except (OSError, IOError):
|
except (OSError, IOError):
|
||||||
return None
|
return None
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def max_processes(self):
|
def max_processes(self):
|
||||||
@ -414,6 +416,64 @@ class GlancesProcesses(object):
|
|||||||
# Update the maximum process ID (pid) number
|
# Update the maximum process ID (pid) number
|
||||||
self.processcount['pid_max'] = self.pid_max
|
self.processcount['pid_max'] = self.pid_max
|
||||||
|
|
||||||
|
# Only work whith PsUtil
|
||||||
|
mandatories_attr = ['cmdline', 'cpu_percent', 'cpu_times',
|
||||||
|
'io_counters', 'memory_info', 'memory_percent',
|
||||||
|
'name', 'nice', 'pid',
|
||||||
|
'ppid', 'status', 'username']
|
||||||
|
self.processlist = [p.info for p in sorted(psutil.process_iter(attrs=mandatories_attr,
|
||||||
|
ad_value=None),
|
||||||
|
key=lambda p: p.info['cpu_percent'])]
|
||||||
|
|
||||||
|
# Add metadata
|
||||||
|
for proc in self.processlist:
|
||||||
|
proc['time_since_update'] = time_since_update
|
||||||
|
# Status
|
||||||
|
proc['status'] = str(proc['status'])[:1].upper()
|
||||||
|
# Process IO
|
||||||
|
# procstat['io_counters'] is a list:
|
||||||
|
# [read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag]
|
||||||
|
# If io_tag = 0 > Access denied (display "?")
|
||||||
|
# If io_tag = 1 > No access denied (display the IO rate)
|
||||||
|
# Availability: all platforms except macOS and Illumos/Solaris
|
||||||
|
if proc['io_counters'] is not None:
|
||||||
|
proc_io = proc['io_counters']
|
||||||
|
io_new = [proc_io.read_bytes, proc_io.write_bytes]
|
||||||
|
# For IO rate computation
|
||||||
|
# Append saved IO r/w bytes
|
||||||
|
try:
|
||||||
|
proc['io_counters'] = io_new + self.io_old[proc['pid']]
|
||||||
|
except KeyError:
|
||||||
|
proc['io_counters'] = io_new + [0, 0]
|
||||||
|
# then save the IO r/w bytes
|
||||||
|
self.io_old[proc['pid']] = io_new
|
||||||
|
io_tag = 1
|
||||||
|
else:
|
||||||
|
proc['io_counters'] = [0, 0] + [0, 0]
|
||||||
|
io_tag = 0
|
||||||
|
|
||||||
|
# Append the IO tag (for display)
|
||||||
|
proc['io_counters'] += [io_tag]
|
||||||
|
|
||||||
|
def update_OLD(self):
|
||||||
|
"""Update the processes stats."""
|
||||||
|
# Reset the stats
|
||||||
|
self.processlist = []
|
||||||
|
self.reset_processcount()
|
||||||
|
|
||||||
|
# Do not process if disable tag is set
|
||||||
|
if self.disable_tag:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get the time since last update
|
||||||
|
time_since_update = getTimeSinceLastUpdate('process_disk')
|
||||||
|
|
||||||
|
# Reset the max dict
|
||||||
|
self.reset_max_values()
|
||||||
|
|
||||||
|
# Update the maximum process ID (pid) number
|
||||||
|
self.processcount['pid_max'] = self.pid_max
|
||||||
|
|
||||||
# Build an internal dict with only mandatories stats (sort keys)
|
# Build an internal dict with only mandatories stats (sort keys)
|
||||||
processdict = {}
|
processdict = {}
|
||||||
excluded_processes = set()
|
excluded_processes = set()
|
||||||
|
@ -1 +1 @@
|
|||||||
psutil==5.2.2
|
psutil==5.4.2
|
||||||
|
Loading…
Reference in New Issue
Block a user