Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplot lib "fatal IO error 25 (Inappropriate ioctl for device) on X server "localhost:10.0"

I run a device monitoring script as a background process which is supposed to run forever. However the process got killed after 24+ hours with the error.

XIO:  fatal IO error 25 (Inappropriate ioctl for device) on X server "localhost:10.0"^M
257706       after 507 requests (507 known processed) with 5 events remaining.^M
257707 0.4.38,23): recv 'x01159454   r28 

I am using matplotlib to plot the graph and this is the first time I am using this lib. Since the error indicates X server issue I believe its related to matplot lib becuase other wise its pure telnet script and there is no role of X server anywhere in the script

Even with the matplot lib my goal is to save the graph as png image.

Below is my code for matplot lib, please see if anything obviously wrong with it.

 15 plt.ioff()
 16
 17 def plot_cpu_utilization_graphs(df):
 18     plt.clf()
 19     column_name = 'CPU'
 20     #df = df[[column_name, 'timestamp', 'ip']]
 21     max_value = df[column_name].max()
 22     if max_value < 100:
 23          max_value = 100
 24     min_value = df[column_name].min()
 25     if min_value > 0:
 26         min_value = 0
 27     start_idx = df['timestamp'].iloc[0]
 28     end_idx = df['timestamp'].iloc[-1]
 29     time_series = pandas.DatetimeIndex(freq='20T', start=start_idx, end=end_idx)
 30     y_axes_series = range(int(min_value), int(max_value), 10)
 31     #ax = df.groupby('ip').plot(x='timestamp', y='CPU')
 32     fig, ax = plt.subplots()
 33     labels = []
 34     for key, grp in df.groupby(['ip']):
 35         ax = grp.plot(x='timestamp', y='CPU', ax=ax )
 36         labels.append(key)
 37     lines, _ = ax.get_legend_handles_labels()
 38     lgd = ax.legend(lines, labels, loc='upper center', bbox_to_anchor=(-.25, 1))
 39     ax.set_ylabel("CPU")
 40     ax.set_xlabel("Time")
 41     ax.set_ylim(min_value, max_value)
 42     #ax.set_xlim(time_series[0], time_series[-1])
 43     plt.title("CPU STATS")
 44     fig.savefig('CPUStats', bbox_extra_artists=(lgd,), bbox_inches='tight')



 74 def reboot_count(df):
 75     plt.clf()
 76     plt.cla()
 77     sf = df[df.Rebooted][['ip', 'Rebooted']].groupby(['ip', 'Rebooted']).agg(len)
 78     if not sf.empty:
 79         new_df = pandas.DataFrame({"ip":sf.index.levels[0], "Reboot Count":sf.values})
 80         p = new_df.plot(kind='bar', x='ip', y='Reboot Count', color='grey')
 81
 82         ax = p.axes
 83         for tick in ax.get_xticklabels():
 84            tick.set_rotation(15)
 85         ax.set_ylabel("Reboot Count")
 86         ax.set_xlabel("IP")
 87         #ax.legend().remove()
 88         plt.title(" REBOOT COUNTS")
 89         plt.savefig('Reboot Counts')
 90     else:
 91         print "No Data Present for Graphs"
like image 251
saurabh baid Avatar asked Sep 01 '17 05:09

saurabh baid


1 Answers

I had the same error. The error is due the backend that matplotlib is using (you are running it in a non-interactive mode)

try

import matplotlib
matplotlib.use('Agg') 

See https://matplotlib.org/faq/howto_faq.html

like image 50
nanounanue Avatar answered Nov 03 '22 16:11

nanounanue