diff --git a/clients/client-linux.py b/clients/client-linux.py
index 7c99180..d96a670 100755
--- a/clients/client-linux.py
+++ b/clients/client-linux.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 # coding: utf-8
-# Update by : https://github.com/cppla/ServerStatus, Update date: 20211009
-# 版本:1.0.2, 支持Python版本:2.7 to 3.9
+# Update by : https://github.com/cppla/ServerStatus, Update date: 20220323
+# 版本:1.0.3, 支持Python版本:2.7 to 3.9
 # 支持操作系统: Linux, OSX, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures
 # 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义,例如:CU = "www.facebook.com"。
 
@@ -9,16 +9,15 @@ SERVER = "127.0.0.1"
 USER = "s01"
 
 
-
-PORT = 35601
 PASSWORD = "USER_DEFAULT_PASSWORD"
-INTERVAL = 1
-PROBEPORT = 80
-PROBE_PROTOCOL_PREFER = "ipv4"  # ipv4, ipv6
-PING_PACKET_HISTORY_LEN = 100
+PORT = 35601
 CU = "cu.tz.cloudcpp.com"
 CT = "ct.tz.cloudcpp.com"
 CM = "cm.tz.cloudcpp.com"
+PROBEPORT = 80
+PROBE_PROTOCOL_PREFER = "ipv4"  # ipv4, ipv6
+PING_PACKET_HISTORY_LEN = 100
+INTERVAL = 1
 
 import socket
 import time
@@ -147,6 +146,10 @@ netSpeed = {
     'avgrx': 0,
     'avgtx': 0
 }
+diskIO = {
+    'read': 0,
+    'write': 0
+}
 
 def _ping_thread(host, mark, port):
     lostPacket = 0
@@ -210,6 +213,10 @@ def _net_speed():
             netSpeed["avgtx"] = avgtx
         time.sleep(INTERVAL)
 
+def _disk_io():
+    diskIO["read"] = 0
+    diskIO["write"] = 0
+
 def get_realtime_data():
     '''
     real time get system data
@@ -242,14 +249,12 @@ def get_realtime_data():
     t4 = threading.Thread(
         target=_net_speed,
     )
-    t1.setDaemon(True)
-    t2.setDaemon(True)
-    t3.setDaemon(True)
-    t4.setDaemon(True)
-    t1.start()
-    t2.start()
-    t3.start()
-    t4.start()
+    t5 = threading.Thread(
+        target=_disk_io(),
+    )
+    for ti in [t1, t2, t3, t4, t5]:
+        ti.setDaemon(True)
+        ti.start()
 
 def byte_str(object):
     '''
@@ -347,6 +352,8 @@ if __name__ == '__main__':
                 array['time_189'] = pingTime.get('189')
                 array['time_10086'] = pingTime.get('10086')
                 array['tcp'], array['udp'], array['process'], array['thread'] = tupd()
+                array['io_read'] = diskIO.get("read")
+                array['io_write'] = diskIO.get("write")
 
                 s.send(byte_str("update " + json.dumps(array) + "\n"))
         except KeyboardInterrupt:
diff --git a/clients/client-psutil.py b/clients/client-psutil.py
index 5b61d0d..62919b2 100755
--- a/clients/client-psutil.py
+++ b/clients/client-psutil.py
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # coding: utf-8
-# Update by : https://github.com/cppla/ServerStatus, Update date: 20211009
+# Update by : https://github.com/cppla/ServerStatus, Update date: 20220323
 # 依赖于psutil跨平台库
-# 版本:1.0.2, 支持Python版本:2.7 to 3.9
+# 版本:1.0.3, 支持Python版本:2.7 to 3.9
 # 支持操作系统: Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures
 # 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义,例如:CU = "www.facebook.com"。
 
@@ -10,16 +10,15 @@ SERVER = "127.0.0.1"
 USER = "s01"
 
 
-
-PORT = 35601
 PASSWORD = "USER_DEFAULT_PASSWORD"
-INTERVAL = 1
-PROBEPORT = 80
-PROBE_PROTOCOL_PREFER = "ipv4"  # ipv4, ipv6
-PING_PACKET_HISTORY_LEN = 100
+PORT = 35601
 CU = "cu.tz.cloudcpp.com"
 CT = "ct.tz.cloudcpp.com"
 CM = "cm.tz.cloudcpp.com"
+PROBEPORT = 80
+PROBE_PROTOCOL_PREFER = "ipv4"  # ipv4, ipv6
+PING_PACKET_HISTORY_LEN = 100
+INTERVAL = 1
 
 import socket
 import time
@@ -131,6 +130,10 @@ netSpeed = {
     'avgrx': 0,
     'avgtx': 0
 }
+diskIO = {
+    'read': 0,
+    'write': 0
+}
 
 def _ping_thread(host, mark, port):
     lostPacket = 0
@@ -190,6 +193,53 @@ def _net_speed():
         netSpeed["avgtx"] = avgtx
         time.sleep(INTERVAL)
 
+def _disk_io():
+    """
+    the code is by: https://github.com/giampaolo/psutil/blob/master/scripts/iotop.py
+    good luck for opensource! modify: cpp.la
+    Calculate IO usage by comparing IO statics before and
+        after the interval.
+        Return a tuple including all currently running processes
+        sorted by IO activity and total disks I/O activity.
+    """
+    while True:
+        # first get a list of all processes and disk io counters
+        procs = [p for p in psutil.process_iter()]
+        for p in procs[:]:
+            try:
+                p._before = p.io_counters()
+            except psutil.Error:
+                procs.remove(p)
+                continue
+        disks_before = psutil.disk_io_counters()
+
+        # sleep some time, only when INTERVAL==1 , io read/write per_sec.
+        # when INTERVAL > 1, io read/write per_INTERVAL
+        time.sleep(INTERVAL)
+
+        # then retrieve the same info again
+        for p in procs[:]:
+            with p.oneshot():
+                try:
+                    p._after = p.io_counters()
+                    p._cmdline = ' '.join(p.cmdline())
+                    if not p._cmdline:
+                        p._cmdline = p.name()
+                    p._username = p.username()
+                except (psutil.NoSuchProcess, psutil.ZombieProcess):
+                    procs.remove(p)
+        disks_after = psutil.disk_io_counters()
+
+        # finally calculate results by comparing data before and
+        # after the interval
+        for p in procs:
+            p._read_per_sec = p._after.read_bytes - p._before.read_bytes
+            p._write_per_sec = p._after.write_bytes - p._before.write_bytes
+            p._total = p._read_per_sec + p._write_per_sec
+
+        diskIO["read"] = disks_after.read_bytes - disks_before.read_bytes
+        diskIO["write"] = disks_after.write_bytes - disks_before.write_bytes
+
 def get_realtime_data():
     '''
     real time get system data
@@ -222,14 +272,12 @@ def get_realtime_data():
     t4 = threading.Thread(
         target=_net_speed,
     )
-    t1.setDaemon(True)
-    t2.setDaemon(True)
-    t3.setDaemon(True)
-    t4.setDaemon(True)
-    t1.start()
-    t2.start()
-    t3.start()
-    t4.start()
+    t5 = threading.Thread(
+        target=_disk_io(),
+    )
+    for ti in [t1, t2, t3, t4, t5]:
+        ti.setDaemon(True)
+        ti.start()
 
 def byte_str(object):
     '''
@@ -328,6 +376,8 @@ if __name__ == '__main__':
                 array['time_189'] = pingTime.get('189')
                 array['time_10086'] = pingTime.get('10086')
                 array['tcp'], array['udp'], array['process'], array['thread'] = tupd()
+                array['io_read'] = diskIO.get("read")
+                array['io_write'] = diskIO.get("write")
 
                 s.send(byte_str("update " + json.dumps(array) + "\n"))
         except KeyboardInterrupt: