Load test of 1000 players on the server: CPU is the ceiling (~135 req/s); player-simulation tools
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,3 +39,22 @@ python tools/loadtest/loadtest.py http://127.0.0.1:8800 users.json 50 10 0 out.j
|
||||
|
||||
سقفِ ساعتیِ دستیار برای مهمانها بر اساسِ IP است؛ با کاربرِ مهمان از یک ماشین بیش از ~۲۰ پرسش در
|
||||
ساعت ممکن نیست، برای همین `mkusers.py` کاربرِ غیرمهمان میسازد.
|
||||
|
||||
## بازیکنها (نه دستیار): `mkplayers.py`، `play.py`، `agg.py`
|
||||
|
||||
هر کاربرِ مجازی خانه ← آزمونِ یک جزیره ← ۴ جواب ← درس ← خلاصه را میچرخد، با مکثِ تصادفیِ ۱ تا THINK_MAX ثانیه.
|
||||
کاربرها اشتراکِ آزمایشیِ یکروزه میگیرند (بی دیوارِ پرداخت و بی کمبودِ قلب). روی سرور، مستقیم روی سوکتِ gunicorn:
|
||||
|
||||
```bash
|
||||
cd ~/mathapp-v2 && mkdir -m 700 .lt # اول بکاپِ دیتابیس
|
||||
LT_N=1000 LT_PREFIX=0900770 venv/bin/python manage.py shell -c "exec(open('tools/loadtest/mkplayers.py').read())" \
|
||||
| grep ^LTJSON | cut -c7- > .lt/users.json
|
||||
for p in $(seq 0 9); do venv/bin/python tools/loadtest/play.py /run/gunicorn/mathapp.sock .lt/users.json .lt/out-$p.json \
|
||||
"300:40,600:40,1000:60" 5 40 $p 10 & done; wait
|
||||
venv/bin/python tools/loadtest/agg.py ".lt/out-*.json" "300:40,600:40,1000:60"
|
||||
```
|
||||
|
||||
**مولد را چندپروسهای اجرا کنید (آخرین دو آرگومان).** یک پروسهی httpx با ۶۰۰ اتصال خودش گلوگاه شد: کلاینت ۲۱ ثانیه
|
||||
دید درحالیکه لاگِ اپ برای همان درخواستها ۰٫۲ تا ۰٫۵ ثانیه میگفت (۲۰۲۶-۱۰-۱۳). همیشه `duration_ms`ِ `logs/app.log`
|
||||
(به وقتِ UTC) را با عددِ کلاینت مقایسه کنید. پاک کردن: `delete_users` از راهِ پایتون روی `phone__startswith=LT_PREFIX`
|
||||
(فهرستِ id از `manage.py shell` با خطِ هشدار قاطی میشود)، کشِ رتبهبندی، و `rm -rf .lt`.
|
||||
|
||||
Reference in New Issue
Block a user