26 KiB
我现在有一个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
当前项目: 机器A:43.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 isn’t supported directly. If you accidentally purchased an annual plan, contact us at support@lessie.ai and we’ll 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
- Pro:Current Plan
- 月度套餐页面
- 年度Max套餐
- Basic以及Pro显示:Downgrade to Basic & Pro
- Max:Current Plan
- 年度basic套餐
- 订阅月度套餐
当前套餐:按钮文案为 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使用情况,并且将结果保存在文件中。 要求:每次记录要时间,内存格式化成GB,cpu格式化成百分比,日志类似
====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 ====