diff options
| author | root <root@da1234cao> | 2024-06-18 11:42:24 +0800 |
|---|---|---|
| committer | root <root@da1234cao> | 2024-06-18 11:42:24 +0800 |
| commit | 5abcfe283a84bb280f71b623d3049382a28d88d8 (patch) | |
| tree | fff18e365fbd109cb9d02e95836292496d7f4c06 | |
| parent | c821b9cfe39cc8fa2dfa3372485eab4da1855786 (diff) | |
add OOM test in docker of server
| -rw-r--r-- | app_register_test/main.py | 20 | ||||
| -rw-r--r-- | app_register_test/main_serv.py | 109 |
2 files changed, 120 insertions, 9 deletions
diff --git a/app_register_test/main.py b/app_register_test/main.py index 78c65d2..2c6a281 100644 --- a/app_register_test/main.py +++ b/app_register_test/main.py @@ -8,8 +8,10 @@ import sys import glob from datetime import datetime +# working_directory = "/root/work/dp_telemetry_app/build/support/marsio/src/marsio/build_v474/examples" working_directory = "/root/work/dp_telemetry_app/build/support/marsio/src/marsio/build_v474/examples" + # 命令列表 commands = [ "./mrtest-l2fwd-nf -a l2fw0 -s nf_0", @@ -28,19 +30,19 @@ def execute_command(stop_event, process_id): thread.start() count += 1 print(f"Process {process_id} executed command count: {count}") - time.sleep(random.uniform(2, 4)) + time.sleep(random.uniform(5, 8)) # 进程函数,定期检查并杀死随机一个mrtest-l2fwd-nf进程 def kill_process(stop_event): while True: - pid_output = os.popen("pidof mrtest-l2fwd-nf").read().strip() - if pid_output: - pids = pid_output.split() - pid_to_kill = random.choice(pids) - os.system(f"kill {pid_to_kill}") - print(f"Killed process with PID: {pid_to_kill}") - elif stop_event.is_set(): - break + # pid_output = os.popen("pidof mrtest-l2fwd-nf").read().strip() + # if pid_output: + # pids = pid_output.split() + # pid_to_kill = random.choice(pids) + # os.system(f"kill {pid_to_kill}") + # print(f"Killed process with PID: {pid_to_kill}") + # elif stop_event.is_set(): + # break time.sleep(random.uniform(2, 4)) # 打印 mrzcpd 进程使用的文件描述符个数 diff --git a/app_register_test/main_serv.py b/app_register_test/main_serv.py new file mode 100644 index 0000000..6cd6c6e --- /dev/null +++ b/app_register_test/main_serv.py @@ -0,0 +1,109 @@ +import multiprocessing +import threading +import os +import random +import time +import signal +import sys +import glob +from datetime import datetime + +# working_directory = "/root/work/dp_telemetry_app/build/support/marsio/src/marsio/build_v474/examples" +working_directory = "/opt/tsg/dp_trace_telemetry/bin" + + +# 命令列表 +commands = [ + "./mrtest-l2fwd-nf -a l2fw0 -s nf_0_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw1 -s nf_1_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw2 -s nf_2_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw3 -s nf_3_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw4 -s nf_4_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw5 -s nf_5_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw6 -s nf_6_fw -m 100", + "./mrtest-l2fwd-nf -a l2fw7 -s nf_7_fw -m 100" +] + +# 线程函数,随机选择并执行一个命令 +def execute_command(stop_event, process_id): + count = 0 + while not stop_event.is_set(): + command = random.choice(commands) + # thread = threading.Thread(target=os.system, args=(command,)) + thread = threading.Thread(target=lambda: os.system(f"{command} > /dev/null 2>&1")) + thread.daemon = True # 使线程在主线程退出时也退出 + thread.start() + count += 1 + print(f"Process {process_id} executed command count: {count}") + time.sleep(random.uniform(30, 40)) + +# 进程函数,定期检查并杀死随机一个mrtest-l2fwd-nf进程 +def kill_process(stop_event): + while True: + pid_output = os.popen("pidof mrtest-l2fwd-nf").read().strip() + if pid_output: + pids = pid_output.split() + # pid_to_kill = random.choice(pids) + # os.system(f"kill {pid_to_kill}") + # print(f"Killed process with PID: {pid_to_kill}") + elif stop_event.is_set(): + break + time.sleep(random.uniform(2, 4)) + +# 打印 mrzcpd 进程使用的文件描述符个数 +def print_fd_count(stop_event): + while not stop_event.is_set(): + pid_output = os.popen("pidof mrzcpd").read().strip() + if pid_output: + pid = pid_output.split()[0] + fd_count = len(glob.glob(f"/proc/{pid}/fd/*")) + print(f"mrzcpd process with PID {pid} is using {fd_count} file descriptors") + else: + print("mrzcpd process not found") + time.sleep(1) + +def signal_handler(signum, frame, stop_event, processes, start_time): + print("Caught signal, terminating processes...") + stop_event.set() + end_time = datetime.now() + elapsed_time = end_time - start_time + hours, remainder = divmod(elapsed_time.total_seconds(), 3600) + minutes, seconds = divmod(remainder, 60) + print(f"Program ran for: {int(hours)}:{int(minutes)}:{int(seconds)}") + # for process in processes: + # process.terminate() + # sys.exit(0) + +if __name__ == "__main__": + os.chdir(working_directory) + + stop_event = multiprocessing.Event() + start_time = datetime.now() + + # 创建并启动执行命令的进程 + command_processes = [] + for i in range(0, 8): + command_process = multiprocessing.Process(target=execute_command, args=(stop_event, i if i != 4 else 3)) + command_process.start() + command_processes.append(command_process) + + # 创建并启动杀死进程的进程 + kill_process_process_1 = multiprocessing.Process(target=kill_process,args=(stop_event,)) + kill_process_process_1.start() + + kill_process_process_2 = multiprocessing.Process(target=kill_process,args=(stop_event,)) + kill_process_process_2.start() + + # 创建并启动打印文件描述符的进程 + # fd_count_process = multiprocessing.Process(target=print_fd_count, args=(stop_event,)) + # fd_count_process.start() + + processes = [kill_process_process_1, kill_process_process_2] + processes.extend(command_processes) + + # 设置信号处理程序来捕获 SIGINT (Ctrl-C) + signal.signal(signal.SIGINT, lambda signum, frame: signal_handler(signum, frame, stop_event, processes, start_time)) + + # 等待两个进程结束 + for process in processes: + process.join() |
