gitea在宝塔上崩溃是因小内存vps缺swap触发oom killer;必须创建4gb交换文件并禁用索引、ssh和缓存,再以专用用户运行。

为什么Gitea在宝塔上启动就崩溃?根本不是Gitea的问题
宝塔面板默认不启用Swap,而Gitea(尤其是v1.22+)启动时需加载Git索引、LFS元数据和SQLite缓存,git命令本身在首次克隆或仓库扫描时会瞬时占用超800MB内存——这远超512MB小内存VPS的物理上限,触发内核OOM Killer直接杀掉gitea进程。你看到的“崩溃”其实是Linux主动终止,日志里通常只有Killed process 1234 (gitea),没有堆栈或错误码。
必须先加Swap,否则调任何Gitea参数都白搭
Swap不是“可选优化”,是512MB/1GB机器跑Gitea的硬性前置条件。宝塔安装Git时提示“至少需要3700MB内存”,本质就是检测到无Swap且物理内存不足。按顺序执行以下操作:
- 创建4GB交换文件:
sudo fallocate -l 4G /swapfile;若报fallocate: failed,改用sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 - 设权限并激活:
sudo chmod 600 /swapfile→sudo mkswap /swapfile→sudo swapon /swapfile - 写入持久化配置:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - 验证是否生效:
free -h输出中Swap行应显示4.0G且used为0(刚启用时)
注意:不要用swappiness=10之类调优,Gitea这类IO密集型服务需要Swap真正可用,而非仅作后备。设为10反而导致内存紧张时来不及换出就OOM。
Gitea配置文件里必须关掉三个吃内存的功能
即使有了Swap,Gitea默认配置仍会预分配大量内存。编辑/www/wwwroot/gitea/custom/conf/app.ini(路径以你实际部署为准),在[repository]和[cache]段强制限制:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
[repository]下添加:DISABLE_INDEXING = true(禁用全文检索索引,省300MB+)、START_SSHTD = false(不用SSH访问就关掉sshd子进程) -
[cache]下添加:ADAPTER = memory→ 改为ADAPTER = dummy(彻底禁用缓存,由Nginx或CDN承担) -
[database]下确认DB_TYPE = sqlite3,且PATH指向/www/wwwroot/gitea/gitea.db(避免误配MySQL加重负担)
改完重启Gitea:sudo systemctl restart gitea。此时ps aux --sort=-%mem | head -5能看到主进程内存稳定在200MB内,不再飙升。
宝塔里别用“一键部署”,手动建运行用户更安全
宝塔应用市场里的Gitea插件常以root或www用户运行,权限过高且环境变量混乱,容易因$HOME未指向Gitea数据目录导致临时文件乱写、内存泄漏。正确做法是:
- 新建专用用户:
sudo useradd -m -s /bin/bash gituser - 把Gitea二进制和
custom/目录所有权全给它:sudo chown -R gituser:gituser /www/wwwroot/gitea - 用
sudo -u gituser /www/wwwroot/gitea/gitea web手动测试启动,确认无permission denied或cannot find $HOME报错 - 再配置systemd服务,
User=gituser字段必须显式声明
这点极易被忽略:Gitea在root下首次运行会生成~/.ssh/和~/.cache/,后续切回普通用户时路径错乱,反复触发Git内存重分配,最终又回到崩溃循环。










