1.报错,too many open files
查询方法:查看linux允许的最大句柄数,命令ulimit -a。然后使用命令lsof -p 进程id可以查看单个进程所有打开的文件详情,使用命令lsof -p 进程id | wc -l可以统计进程打开了多少文件,如果文件数过多使用lsof -p 进程id命令无法完全查看的话,可以使用lsof -p 进程id > openfiles.log将执行结果内容输出到日志文件中查看。
最终原因:Assembly.Load(byte[])每次加载会载入当前dll与相关dll,多次重复的话就会导致文件打开数超过默认值1024导致报错。
2.超时,Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool
最终原因:多线程同时并发,connection.open时间会超过15s,需要设置connection timeout=300。
实际原因:同时并发导致线程池中没有对应缓存,都必须新建连接,如果先连接一个,再进行10并发就不会有此问题。
3.一些命令
ulimit -n 2048
apt-get update
apt-get install procps
Ps -aux
lsof -p 进程id | wc -l
lsof -p 进程id > openfiles.log
Nohup dotnet...
4.docker相关
启动 systemctl start docker
重启 systemctl restart docker ; sudo service docker restart
关闭 service docker stop ; systemctl stop docker