uWSGI listen queue of socket “port“ (fd: 6) full !!! (100/100)

本文解决在CentOS7环境下使用Django、uWSGI及Nginx进行压力测试时出现的问题,通过调整服务器的sysctl参数和uWSGI监听参数,提升系统的并发能力和响应速度。

问题场景

django+uwsgi+nginx,在centos7下进行压测报错

解决方案

针对该问题,需要从服务器和web服务器两方进行参数修改

  • 服务器参数修改
    : 这里直接修改配置文件了,重启后仍然有效。

修改/etc/sysctl.conf文件,添加或者修改这几个参数值

#对于一个高负载 web服务环境来说,默认的 128 太小
net.core.somaxconn = 65535
​#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_max_syn_backlog = 8192
#网卡设备将请求放入队列的长度
net.core.netdev_max_backlog = 65536

修改完成之后要记得 sysctl -p 重新加载参数

  • uwsgi参数修改
    不管是配置,还是命令行加一个选项,例如 .ini 文件中添加如下配置
    ,然后重启应用,重新加载配置。
listen=10240
<think>好的,我现在需要帮助用户解决SearXNG在创建uwsgi.ini文件时遇到的权限问题。用户提到使用的是SearXNG version 2025.4.27+c733aa83e,并且遇到了“Permission denied”错误。首先,我需要回忆SearXNG的安装和配置过程,尤其是涉及文件权限的部分。 用户之前的问题是关于重启SearXNG时的配置和故障排查,所以可能当前的权限问题是在配置过程中出现的。SearXNG通常使用Docker部署,因此需要检查Docker容器内的文件权限以及挂载卷的权限。但用户提到的uwsgi.ini文件可能是容器内部生成的文件,或者在宿主机的挂载目录中。 首先,权限问题通常出现在容器试图在挂载的宿主机目录中创建或修改文件时。如果宿主机目录的权限过于严格(例如,属于root用户而容器以非root用户运行),就会导致“Permission denied”错误。需要检查uwsgi.ini文件的路径,确认该目录在宿主机上的权限设置是否正确。 其次,SearXNG的Docker镜像可能以特定的用户(如searxng用户)运行,这个用户的UID/GID可能与宿主机的目录权限不匹配。这时候需要调整宿主机目录的权限,或者修改Docker Compose文件中的用户设置,使其匹配。 另外,用户可能手动创建了uwsgi.ini文件,或者在配置过程中触发了该文件的生成。需要确认该文件是否需要预先存在,或者是否由SearXNG自动生成。如果是自动生成,检查生成该文件的进程是否有足够的权限。 还要考虑SELinux或AppArmor等安全模块是否阻止了容器写入目录。可能需要调整安全策略或禁用这些模块,但这可能带来安全风险,需谨慎处理。 可能需要建议用户使用docker-compose exec进入容器,检查目标目录的权限,并尝试手动创建文件测试权限。同时,查看容器日志以获取更详细的错误信息,帮助定位问题。 最后,确保用户按照官方文档的步骤进行配置,避免遗漏权限设置的相关步骤。如果用户自行修改了Docker Compose文件或挂载路径,需要检查这些修改是否正确。</think>### SearXNG创建uwsgi.ini文件权限问题解决方案 当在SearXNG部署过程中遇到`Permission denied`错误时,通常由**容器用户权限与宿主机目录权限不匹配**导致。以下是分步排查与修复方案: --- #### 一、核心问题定位 1. **确认文件路径归属** 检查目标目录(如`/etc/searxng/uwsgi.ini`或自定义挂载路径)的权限: ```bash ls -ld /path/to/searxng-config-dir # 查看目录权限 ls -l /path/to/searxng-config-dir # 查看文件权限 ``` *正常情况:容器用户(如`searxng`用户UID=1000)需有目录的写入权限* 2. **验证容器用户身份** ```bash docker-compose exec searxng id # 查看容器运行用户UID/GID ``` *若输出为`uid=1000(searxng) gid=1000(searxng)`,则宿主机目录需允许该UID写入* --- #### 二、权限修复方法 **方法1:修改宿主机目录权限** ```bash sudo chown -R 1000:1000 /path/to/searxng-config-dir # 将目录归属改为UID=1000 sudo chmod -R 755 /path/to/searxng-config-dir # 设置可写权限[^2] ``` **方法2:强制容器以root用户运行(临时方案)** 修改`docker-compose.yml`: ```yaml services: searxng: user: root # 添加用户声明 volumes: - "./uwsgi.ini:/etc/searxng/uwsgi.ini" # 确认挂载路径正确 ``` 重启容器: ```bash docker-compose down && docker-compose up -d --build ``` **方法3:预先创建文件并赋权** ```bash touch /path/to/searxng-config-dir/uwsgi.ini # 宿主机手动创建 chmod 664 /path/to/searxng-config-dir/uwsgi.ini # 设置权限 ``` --- #### 三、高级调试技巧 1. **检查SELinux/AppArmor限制** ```bash sudo ausearch -m avc -ts recent # 查看SELinux拒绝日志 sudo setenforce 0 # 临时禁用SELinux(仅调试用) ``` 2. **查看容器内进程行为** ```bash docker-compose exec searxng bash su searxng -c "touch /etc/searxng/uwsgi.ini" # 模拟文件创建 ``` 3. **验证Docker卷映射** 确保`docker-compose.yml`中挂载路径正确: ```yaml volumes: - "./searxng:/etc/searxng" # 示例配置 ``` --- #### 四、典型错误场景 **场景1:宿主机目录属主为root** ```text Error: [Errno 13] Permission denied: '/etc/searxng/uwsgi.ini' ``` *解决方案*:执行`chown 1000:1000`修改目录归属[^1] **场景2:容器用户无写入权限** ```text OSError: [Errno 30] Read-only file system ``` *解决方案*:在`docker-compose.yml`中增加`user: "1000:1000"`声明 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfly2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值