Files
2025-10-24 18:18:40 +08:00

26 KiB
Raw Permalink Blame History

我现在有一个python爬虫项目启动是在项目目录内手动python update_yt_week.py > output_week.log 2>&1 &产生的进程日志就放在output_week.log文件内。 现在有问题就是这个进程会直接中断结束我需要有方法自己检测这个进程有什么方法思路或者工具我初步的想法有一个东西可以每10分钟检查改进程假如没有进程就执行启动命令执行完启动后每10秒重新检查进程是否启动假如连续3次没有检查到重新启动的进程就再次立即执行启动命令连续3次执行启动命令且则进程都检查不到说明python项目有问题则整体停止这个检查工具。 你有什么方式方法实现吗不用写具体的脚本代码给我就说有什么方法思路方式工具可以实现并且需要保留日志文件pyhton脚本本身的日志文件以及该工具执行检查启动相关动作的日志文件并且最好这两个文件能够按天分割成不同文件。

is_running() { pgrep -f "python update_yt_week.py" > /dev/null 2>&1 return $? }

pgrep -f "python update_yt_week.py" | head -n 1


当前项目: 机器A43.159.145.241 安装了tengine部署了前端文件、运行了python项目5001端口本机的5001负责接收前端页面的请求再由python项目的代码请求别的机器上的jar包服务 tengine配置文件主要为 server { listen 443 ssl; server_name jennie.deal www.jennie.deal; ssl ... ... location / { root /data/tengine/html/jennie_web/dist/; index index.html index.htm; try_files $uri $uri/ /index.html; } location /prod-api/ { proxy_pass http://127.0.0.1:5001; proxy_set_header Host $host; ... } }

python项目调用后端jar的配置 [api]

远程API基础URL

api_base_url = http://129.204.158.54:8070/prod-api/

目标服务器

target_server_8070 = http://129.204.158.54:8070

机器B和C在同个局域网BC都运行了相同的jar包作为机器A的jar后端 机器B: 公网129.204.158.54内网为172.24.16.10 机器C公网43.138.204.95内网为172.24.16.7

机器B安装了tengine配置负载均衡 upstream agent_backend { server 127.0.0.1:8070 max_fails=3 fail_timeout=30s; server 172.24.16.7:8070 max_fails=3 fail_timeout=30s; keepalive 300; } server { listen 8070; location / { proxy_pass http://agent_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; ... } }

现在查看机器BCjar的日志只有机器B有机器C没有说明机器A的前端页面的接口都是访问的机器B负载均衡没起作用为什么怎么办能给单独一个sever块的产生的日志单独产生到另外的日志文件吗

python脚本查询es

TARGET_EVENT = "达人搜索"

query = {
    "query": {
        "bool": {
            "filter": [
                {"term": {"mylog.module": "business"}},
                {"term": {"mylog.level": "warning"}},
                {"wildcard": {"mylog.tail.keyword": f"*[event: {TARGET_EVENT}]*"}},
                {"range": {
                    "@timestamp": {
                        "gte": start_time.isoformat(),
                        "lte": end_time.isoformat()
                    }
                }}
            ]
        }
    },
    "sort": [{"@timestamp": "desc"}],
    "size": 1,
    "track_total_hits": True
}

注释{"wildcard": {"mylog.tail.keyword": f"[event: {TARGET_EVENT}]"}}, 就得到,加上就查不到 日志原本的样子2025-06-12 18:11:48 - business - WARNING - [user_email: 302866617a@gmail.com] [conversation_id: d998dc11-d7a9-4817-8e90-e208454c80a1] [event: 达人搜索 | msg: 处理完成,耗时: 1.43秒,未找到匹配达人 | context: duration:1.43s,results_count:0] mylog.tail字段是 [event: 达人搜索 | msg: 处理完成,耗时: 1.43秒,未找到匹配达人 | context: duration:1.43s,results_count:0]

echo "2025-06-12 19:16:48 - business - WARNING - [user_email: 123@gmail.com] [conversation_id: 123-d7a9-4817-8e90-e208454c80a1] [event: 达人搜索 | msg: 这是测试的,耗时: 9.13秒,匹配71个达人 | context: duration:9.13s,results_count:71]" >> influencer_search_20250612_184513.log

现在我的ai对话产品有4个套餐等级Free、Basic、Pro、Max格式是“套餐月付价格年付平均月价,每月积分)” Free ($0,$0,60) Basic$99.00$84.90,1000 Pro$199$169,2500 Max$299,$259,6000 以下是套餐按钮交互逻辑补充:

  • 用户当前订阅了任意一个套餐
    • 订阅月度套餐
      • 允许用户切换不同套餐类型
      • 订阅的是Basic套餐
        • 月度套餐界面
          • Free套餐按钮Unavailable
          • Basic套餐显示Current Plan
          • Pro以及Max显示Upgrade to Pro & Max
        • 年度套餐界面
          • Free套餐按钮Unavailable
          • Basic套餐显示Switch to Basic (Yearly)
          • Pro以及Max显示Upgrade to Pro & Max
      • 订阅是Max最高级别套餐
        • 月度套餐界面
          • Free套餐按钮Unavailable
          • Basic以及Pro显示Downgrade to Basic & Pro
            • (下个月生效)
          • Max套餐显示Current Plan
        • 年度套餐页面
          • Free套餐按钮Unavailable
          • Basic显示
          • Pro套餐显示
          • Max套餐显示Switch to Max (Yearly)
    • 用户订阅的年度套餐
      • 年度basic套餐
        • 月度套餐页面
          • Free套餐按钮Unavailable
          • 所有套餐按钮均为Unavailable
            • 鼠标hover显示Switching from annual to monthly isnt supported directly. If you accidentally purchased an annual plan, contact us at support@lessie.ai and well process your refund.
          • 不允许用户自己从年度切换回月度
        • 年度套餐页面
          • Free套餐按钮Unavailable
          • Basic显示Current Plan
          • Pro和Max套餐显示 Upgrade to Pro & Max
            • 点击之后直接进入check out页面补足差价
      • 年度Pro套餐
        • 月度套餐页面
          • Free套餐按钮Unavailable
        • 年度套餐页面
          • Basic以及Max显示Downgrade to Basic & Pro
          • ProCurrent Plan
      • 年度Max套餐
        • Basic以及Pro显示Downgrade to Basic & Pro
        • MaxCurrent Plan

当前套餐:按钮文案为 Current Plan不可点击 升级套餐:按钮文案格式为 Upgrade to Plus / Pro / Max 降级套餐: 1. 若用户当前套餐为 Plus 或 Pro且页面中出现低版本套餐如 Basic按钮文案为 Switch to Basic 2. 若用户降级至免费套餐(假设 Basic 为免费版时),则按钮文案建议为: Downgrade to Basic / Plus / Pro

我补充一下套餐流转的规则: 1、升级套餐更新订阅周期立即生效积分补足至新版套餐标准 示例用户升级前积分剩余500生成Pro后积分补足到2500 2、套餐降级下一个订阅周期生效用户退款全部人工处理 订阅周期以当前用户的订阅情况来计算 示例: 用户当前购买套餐为 月付Pro版订阅有效期为2025-08-01至2025-09-01用户08-15修改套餐为 月付Basic版 则 月付Basic版 的生效日期为2025-09-01 下一个订阅周期生效 3、低套餐升级到高套餐 及时生效 更新下次扣款日期 从用户付款日开始 收新版本套餐的金额,减去上个月 差价金额 = 高级版金额 - 当月积分消耗比例 × 无折扣(用户付款时)的月付价格

现在前端页面的请求请求到go服务前端的nginx配置文件upstream go_backend { ip_hash; server 10.0.0.10:8100 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.8:8100 weight=10 max_fails=3 fail_timeout=30s; }然后go服务会请求python服务现在python服务是有5台机器运行了5个实例第二个nginx配置文件upstream app_lessie_ai_backend { ip_hash; server 10.0.0.12:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.7:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.11:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.2:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.13:7001 weight=10 max_fails=3 fail_timeout=30s; }。前端正常使用的时候go再请求到python但是python的nginx负载视角看永远是go服务这个IP在请求它导致一直只有一台python服务机器在接受请求怎么办怎么才能让真正的浏览器用户可以负载到不同python服务机器且同一个用户短时间尽量请求同一个python。

前端nginx的日志格式log_format app_lessie_ai_log '客户端IP: $remote_addr | 用户: $remote_user | 时间: $time_local | ' '请求方法和路径: "$request" | 状态码: $status | 响应大小: $body_bytes_sent | ' '来源页面: "$http_referer" | 客户端UA: "$http_user_agent" | ' '上游服务器: $upstream_addr | 上游响应耗时: $upstream_response_time | ' '请求总耗时: $request_time | Host: $host'; 查看日志筛选出访问go服务的实际日志内容 客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880236 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.163 | 请求总耗时: 0.168 | Host: app.lessie.ai 客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880230 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.141 | 请求总耗时: 0.146 | Host: app.lessie.ai 客户端IP: 172.69.134.19 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /api/searches/v1/18d2fad9-12b6-4f91-80fb-7304adf0bcd7?share_id=1QWYc5L8mBQofb8DWw6ReY HTTP/1.1" | 状态码: 200 | 响应大小: 880222 | 来源页面: "https://app.lessie.ai/showcase/1QWYc5L8mBQofb8DWw6ReY" | 客户端UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" | 上游服务器: 10.0.0.8:8100 | 上游响应耗时: 0.356 | 请求总耗时: 0.355 | Host: app.lessie.ai 客户端IP: 172.71.155.24 | 用户: - | 时间: 23/Sep/2025:20:22:12 +0800 | 请求方法和路径: "GET /api/conversation/v1?page_num=1&page_size=3&keyword=&is_filter_hidden=true HTTP/1.1" | 状态码: 200 | 响应大小: 127 | 来源页面: "https://app.lessie.ai/" | 客户端UA: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.7 Mobile/15E148 Safari/604.1" | 上游服务器: 10.0.0.10:8100 | 上游响应耗时: 0.209 | 请求总耗时: 0.209 | Host: app.lessie.ai

python 服务的nginx的日志格式 upstream prod_py_search { #ip_hash; hash $http_x_forwarded_for consistent; server 10.0.0.12:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.7:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.11:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.2:7001 weight=10 max_fails=3 fail_timeout=30s; server 10.0.0.13:7001 weight=10 max_fails=3 fail_timeout=30s; }

log_format prod_py_search_log '客户端IP: $remote_addr | 用户: $remote_user | 时间: $time_local | ' '请求方法和路径: "$request" | 状态码: $status | 响应大小: $body_bytes_sent | ' 'XFF: "$http_x_forwarded_for" | 客户端UA: "$http_user_agent" | ' '上游服务器: $upstream_addr | 上游响应耗时: $upstream_response_time | ' '请求总耗时: $request_time | Host: $host';

python服务的nginx日志内容 客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.088 | 请求总耗时: 0.088 | Host: 10.0.0.3 客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.103 | 请求总耗时: 0.103 | Host: 10.0.0.3 客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:40 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.107 | 请求总耗时: 0.107 | Host: 10.0.0.3 客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.084 | 请求总耗时: 0.084 | Host: 10.0.0.3 客户端IP: 10.0.0.8 | 用户: - | 时间: 23/Sep/2025:20:20:41 +0800 | 请求方法和路径: "GET /internal/search/18d2fad9-12b6-4f91-80fb-7304adf0bcd7 HTTP/1.1" | 状态码: 200 | 响应大小: 868211 | XFF: "-" | 客户端UA: "Go-http-client/1.1" | 上游服务器: 10.0.0.13:7001 | 上游响应耗时: 0.293 | 请求总耗时: 0.294 | Host: 10.0.0.3

分析一下这个内存变化:(base) [root@prod-lessie-server02 ~]#free -h total used free shared buff/cache available Mem: 15Gi 15Gi 133Mi 1.0Mi 237Mi 98Mi Swap: 8.0Gi 8.0Gi 0.0Ki (base) [root@prod-lessie-server02 ~]#ps aux|grep 7001 root 158009 0.0 0.0 35908 10420 ? S Oct21 0:12 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158011 0.8 90.3 22549000 14317120 ? Sl Oct21 24:39 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158012 0.3 0.7 4111768 117868 ? Sl Oct21 9:26 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158013 0.4 1.5 5852256 243708 ? Sl Oct21 12:08 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158014 0.5 1.6 6056408 260252 ? Sl Oct21 13:51 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158160 0.0 0.2 2404712 39116 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158186 0.0 0.7 2404684 119708 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158218 0.0 0.1 2404716 31388 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158253 0.0 0.2 2406028 35400 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 1028724 0.0 0.0 6408 384 pts/0 D+ 18:37 0:00 grep --color=auto 7001 (base) [root@prod-lessie-server02 ~]#ps aux|grep 7001 root 158009 0.0 0.0 35908 11316 ? S Oct21 0:12 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158012 0.3 0.7 4111768 119916 ? Sl Oct21 9:27 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158013 0.4 1.5 5852256 246652 ? Sl Oct21 12:11 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158014 0.5 1.6 6056408 261532 ? Sl Oct21 13:53 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158160 0.0 0.2 2404712 39244 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158186 0.0 0.7 2404684 119324 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158218 0.0 0.2 2404716 31772 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158253 0.0 0.2 2406028 35400 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 1028770 0.0 0.0 6408 2176 pts/0 S+ 18:39 0:00 grep --color=auto 7001 (base) [root@prod-lessie-server02 ~]#free -h total used free shared buff/cache available Mem: 15Gi 2.0Gi 12Gi 1.0Mi 961Mi 13Gi Swap: 8.0Gi 3.9Gi 4.1Gi (base) [root@prod-lessie-server02 ~]# (base) [root@prod-lessie-server02 ~]#ps auxf|grep 7001 root 1029136 0.0 0.0 6408 2304 pts/0 S+ 18:39 0:00 | | _ grep --color=auto 7001 root 158009 0.0 0.0 35908 14004 ? S Oct21 0:12 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158012 0.3 0.7 4111768 121836 ? Sl Oct21 9:27 _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158160 0.0 0.2 2404712 39244 ? Sl Oct21 0:06 | _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158013 0.4 1.5 5852256 248700 ? Sl Oct21 12:11 _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158218 0.0 0.2 2404716 31772 ? Sl Oct21 0:06 | _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158014 0.5 1.6 6056408 264348 ? Sl Oct21 13:53 _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158253 0.0 0.2 2406028 35400 ? Sl Oct21 0:06 | _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 1028807 50.5 3.4 3214636 553780 ? Sl 18:39 0:08 _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 1029008 0.0 2.9 2408940 466648 ? Sl 18:39 0:00 _ /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 root 158186 0.0 0.7 2404652 120604 ? Sl Oct21 0:06 /data/webapps/prod_lessie_sourcing_agents/venv/bin/python /data/webapps/prod_lessie_sourcing_agents/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:7001 --timeout 300 dialogue.app:app --max-requests 500 --max-requests-jitter 50 (base) [root@prod-lessie-server02 ~]# (base) [root@prod-lessie-server02 ~]#free -h total used free shared buff/cache available Mem: 15Gi 2.1Gi 12Gi 1.0Mi 1.0Gi 13Gi Swap: 8.0Gi 3.9Gi 4.1Gi 从工作进程上分析,从内存占用大到恢复是什么原因

给我一个sh脚本每分钟记录这个项目的各个进程、子进程的内存cpu使用情况并且将结果保存在文件中。 要求每次记录要时间内存格式化成GBcpu格式化成百分比日志类似

====2025-10-01 10:00:00 ==== 主进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx

分析变化: 1、哪个子进程使用了更多的内存哪个进程使用了更多的CPU 2、相比上次查询哪个子进程使用了资源变化了多少 3、相比上次查询哪个子进程没了哪个子进程出现了 ====2025-10-01 10:00:00 ====

====2025-10-01 10:01:00 ==== 主进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx 子进程名xxx | PID: xxx | 内存使用情况xxx | CPU使用情况xxx

分析变化: 1、哪个子进程使用了更多的内存哪个进程使用了更多的CPU 2、相比上次查询哪个子进程使用了资源变化了多少 3、相比上次查询哪个子进程没了哪个子进程出现了 ====2025-10-01 10:01:00 ====