启动速度

GPT Researcher的启动速度

启动速度

测试方式:

cd ~/work/code/agents/gpt-researcher

TZ=UTC-8 date +"%Y-%m-%d %H:%M:%S,%3N"; python -m uvicorn main:app --reload

2025-11-20 14:58:03,508
INFO:     Will watch for changes in these directories: ['/home/sky/work/code/agents/gpt-researcher']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [45710] using StatReload
INFO:     Started server process [45755]
INFO:     Waiting for application startup.
2025-11-20 14:58:04,232 - backend.server.app - INFO - GPT Researcher API ready - local mode (no database persistence)
INFO:     Application startup complete.

2025-11-20 14:58:04,232 对比 2025-11-20 14:58:03,508, 启动速度为 724 ms. 重复测试多次, 成绩依次为: 728 ms, 718ms, 720ms, 714 ms. 5次平均值为 720 ms.

内存占用

用 linux 命令:

ps -ef | grep python | grep -v color=auto

找出主进程和子进程:

sky        47722   15937  3 15:09 pts/3    00:00:22 /home/sky/.pyenv/versions/3.11.13/bin/python -m uvicorn main:app --reload
sky        47766   47722  0 15:09 pts/3    00:00:00 /home/sky/.pyenv/versions/3.11.13/bin/python -c from multiprocessing.resource_tracker import main;main(4)
sky        47767   47722  0 15:09 pts/3    00:00:03 /home/sky/.pyenv/versions/3.11.13/bin/python -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=5, pipe_handle=7) --multiprocessing-fork

再执行:

ps -p 47722,47766,47767 -o pid,ppid,cmd,%mem,rss

得到进程的内存占用:

    PID    PPID CMD                         %MEM   RSS
  47722   15937 /home/sky/.pyenv/versions/3  0.0 26080
  47766   47722 /home/sky/.pyenv/versions/3  0.0 12640
  47767   47722 /home/sky/.pyenv/versions/3  0.3 120092

这里的 rss 就是 常驻内存大小(KB,常驻内存 = 实际物理内存使用量), 加起来 158812 KB 约等于 155 MB.

可以写一个简单的 python 脚本来进行计算:

vi mem_check.py

内容为:

import psutil
import re

def find_main_and_children(pattern="main:app"):
    pids = []
    for proc in psutil.process_iter(['pid', 'cmdline']):
        try:
            cmdline = " ".join(proc.info['cmdline'])
            if pattern in cmdline:
                pids.append(proc.info['pid'])
                # 加上子进程
                children = proc.children(recursive=True)
                pids.extend([child.pid for child in children])
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            continue
    return pids

def calc_total_memory(pids):
    total = 0
    for pid in pids:
        try:
            process = psutil.Process(pid)
            mem = process.memory_info().rss / 1024  # KB
            print(f"PID {pid}: {mem:.0f} KB")
            total += mem
        except psutil.NoSuchProcess:
            print(f"PID {pid} 不存在")
    print(f"总内存占用: {total:.0f} KB ({total/1024:.2f} MB)")

if __name__ == "__main__":
    pids = find_main_and_children("main:app")
    if pids:
        print(f"找到进程: {pids}")
        calc_total_memory(pids)
    else:
        print("没有找到匹配的进程")

运行:

python mem_check.py

达到结果:

python mem_check.py                             

找到进程: [47722, 47766, 47767]
PID 47722: 26080 KB
PID 47766: 12640 KB
PID 47767: 120092 KB
总内存占用: 158812 KB (155.09 MB)