Repository navigation
Capacity.zh CN
houyhl edited this page Oct 18, 2026
·
1 revision
简体中文 | English | Wiki 首页 | 安装后运维
本页记录一个小型网站在实测负载下的表现,供估算服务器规模参考。你的结果取决于硬件、数据和访问者;要观察自己的网站,见指标。
| 服务器 | Intel Core i7-11370H(4 核 8 线程),3.3 GiB 内存,SSD,Ubuntu 26.04。MariaDB 11.8、Redis 和 MinIO 在同一台服务器上;一个后端进程(server.clusters: null,与安装时相同);一台评测机,2 个评测槽位,使用一个 CPU。 |
| 数据(合成) | 2,000 个用户;1,500 道题目(1,400 道公开),每道有两种语言的题面和两个标签;一年内的 300,000 个练习提交;30 场比赛,每场 6 道题(已结束的约 1,000 个提交,进行中的一场 2,551 个);3,000 个讨论,每个 5 条回复;300 个 50 道题的题单和一个 1,000 道题的题单。数据共约 300 MB。 |
| 访问者 | 页面访问以固定速率到来。每次访问发送该页面在浏览器中发送的 API 请求(用 Chromium 录制),题目、提交、用户和讨论各不相同。75% 已登录。比例:进行中的比赛 20%,其排名 10%,题目 20%,提交列表 12%,单个提交 8%,题库 8%,首页 6%,其余为其他比赛、讨论、用户和题单。 |
| 评测 | 全程每 2 秒一个 C++ 提交,真实评测 |
| 速率 | 每秒 20 次页面访问,持续 2 分钟,约相当于 300 名学生参加比赛、每人每 15 秒刷新一次;然后每秒 40 次持续 90 秒,每秒 80 次持续 60 秒 |
请求直接发送到后端,不经过 Nginx 和 TLS。所有模拟访问者共用一个地址,因此关闭了限流。
| 每秒页面访问 | 每秒请求 | 页面访问 p50 / p95 | 请求 p95 | 等待评测 p95 | 后端 CPU 平均 / 峰值 | MariaDB CPU |
|---|---|---|---|---|---|---|
| 20 | 29 | 12 / 35 毫秒 | 20 毫秒 | 16 毫秒 | 28% / 63% | 11% |
| 40 | 59 | 11 / 30 毫秒 | 16 毫秒 | 14 毫秒 | 40% / 57% | 19% |
| 80 | 116 | 12 / 37 毫秒 | 22 毫秒 | 19 毫秒 | 71% / 95% | 34% |
没有请求失败。后端约使用 450 MB 内存,MariaDB 约 200 MB。100% CPU 即一个核。
最慢的页面是 1,000 道题的题单(约 100 毫秒)。所提出的“页面读取 p95 低于 300 毫秒”的目标在三种速率下都远远达到。在每秒约 120 个请求时,后端进程用掉一个核的大部分,这台服务器的单个进程会在这附近达到上限。运行多个后端进程(server.clusters)不在本次测量范围内。
同样的负载作用于上一版本:每秒 20 次页面访问时,页面中位数耗时 6.2 秒、p95 15.5 秒,提交最多等待评测 90 秒。后端进程已饱和(计入垃圾回收为 152% CPU),每秒 40 次时落后数分钟。比赛页面每次访问都从比赛的全部提交计算排名,题库对每道题分别读取标签,题单对每道题分别读取(1,000 道题 2,118 次查询)。现在:
| 页面 | 查询次数 之前 → 现在 | 耗时 之前 → 现在(逐个请求) |
|---|---|---|
| 进行中的比赛、排名 | 13–14 → 12–13,排名在提交变化之前一直复用 | 75–115 毫秒 → 9–20 毫秒 |
| 题库(50 道题) | 103–109 → 5–11 | 31–49 毫秒 → 11–19 毫秒 |
| 1,000 道题的题单 | 2,118 → 120 | 1,242 毫秒 → 108 毫秒 |
| 讨论 | 24–50 → 13–18 | 10–19 毫秒 → 7–12 毫秒 |
打开的比赛页面在打开时只请求一次比赛详情(之前是两次),并在浏览器标签页隐藏期间停止刷新。
用 MariaDB 慢查询日志(阈值 0 秒)记录了这些页面的全部后端查询,并检查了它们的执行计划。没有慢查询:单个查询检查的行数最多为 4,500(统计可见的讨论)。在 330,000 个提交上,提交列表按各个筛选条件(题目、用户、状态、语言及其组合)查询都在 3 到 19 毫秒内完成,使用的是已有的组合索引。因此本版本没有增加索引。
简体中文
- LLMOJ Wiki
- AI 环境与固定限制
- AI
- 后端配置
- 容量
- 功能升级与数据库修改
- 配置总览
- 比赛赛制
- 分布式评测
- Docker 源
- 环境变量与维护脚本
- 前端配置
- HTTPS 与反向代理
- Hack
- 安装与端口配置
- 评测配置与扩缩容
- 安装后运维
- 发布源码与 Wiki
- 新用户注册审核
- 远程评测机
- NOI / OI 比赛自测(Self Eval)
- 题解
- Fake 处罚
- 提交记录
- 团队
- 两步验证
- 升级
English
- LLMOJ Wiki
- AI
- AI environment and fixed limits
- Backend configuration
- Capacity
- Feature upgrades and database changes
- Configuration overview
- Contest rules
- Distributed judging
- Docker sources
- Environment variables and maintenance scripts
- Frontend configuration
- HTTPS and reverse proxies
- Hacks
- Installation and ports
- Judge configuration and resizing
- Operations
- Publishing source and the wiki
- Registration approval
- Remote judges
- Self Eval in NOI / OI contests
- Solutions
- Fake moderation
- Submissions
- Teams
- Two-factor sign-in
- Upgrading