接到协会老师的任务,我负责了学校 oj 的开发和运维工作,这篇博客记录我在运维过程中遇到的一些问题和解决办法。
- 重启容器 找不到 java,vi 等命令 使用 update update-alternatives —config 配置 java javac vi 等
- java 遇到 OpenJDK 64-Bit Server VM warning: Can’t detect initial thread stack location - find_vma failed 错误原因是 chroot 系统中,需要挂载/proc,只需要执行以下语句即可
mount -t proc none /proc php 下载 excel 文件 nginx 报错 502
首先查看 nginx 日志,发现在站点配置文件中没有设置输出日志,在站点配置文件末尾加入
error_log logs/errors.log error;
输入命令 nginx -t 发现报错
nginx: [emerg] open() “/usr/share/nginx/logs/errors.log” failed (2: No such file or directory)
使用 touch 创建日志文件,查看日志文件发现
*4 upstream sent too big header while reading response header from upstream
百度之后,说是 header 过大的问题,在 nginx.conf 的 http 段加入以下配置
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k;
问题搞定!
- 手动执行 judge_client
judge_client 1000 1 /home/judge/hustoj_core debug
- 手动执行 judge_client
当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级
- supervisor 的使用 运行命令 supervisorctl 然后参照配置文件的写法运行命令
- docker-compose 要注意 services 不能重名,即使是在不同的目录下,如果 services 重名,会覆盖之前的容器,建议使用项目名+容器名进行命名
压力测试
因为使用 redis 缓存了问题数据,我想要测试一下有没有带来性能上提升
首先我尝试的是 postman 的 runner,但是测试之后发现并没有什么区别。后来了解到 postman 的 runner 是串行的。
又看到 jMeter 这个工具,但是它在 linux 下没有 GUI,配置又很繁琐,直接劝退。
之后又看到 linux 下几款 命令行压力测试工具,最终选择使用 ab。
ab 的使用
使用很简单,最基础的设置,请求 10000 次,并发数量 1000
1 | ab -n 10000 -c 1000 http://localhost:8080/api/problem/1 |
socket: Too many open files (24)的解决办法
打开的文件太多了,超过了系统限制
1 | ulimit -n 204800 |
redigo
文献 系统优点
nginx
nginx 容器配置反向代理,无法使用 localhost 访问主机,可以使用宿主机 docker 0 的网卡 ip 代替
mysql 相关
innodb_lock_wait_timeout 和 lock_wait_timeout
前者是 innodb 的 dml 操作的行级锁的等待时间 后面是数据结构 ddl 操作的锁的等待时间
减少锁等待时间,防止数据库卡死
set GLOBAL innodb_lock_wait_timeout = 50;
set GLOBAL lock_wait_timeout = 10;