netcore发布Linux相关问题记录
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义