我有一个相当大的和缓慢的(复杂的数据,复杂的前端)的Web应用程序构建RoR并担任Puma与nginx作为反向代理。查看nginx错误日志,我看到很多条目,例如:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
Run Code Online (Sandbox Code Playgroud)
我很好奇,因为对于不同的用户和不同的用户交互,页面不太可能保持相同,而且我不认为在磁盘上缓冲响应是必要的/有用的。
我知道proxy_max_temp_file_size并将其设置为 0,但在我看来有点尴尬(我的代理尝试缓冲但没有文件可以缓冲到...怎么能更快?)。
我的问题是:
如何删除 [warn] 并避免缓冲响应?关闭proxy_buffering还是设置proxy_max_temp_file_size为0更好?为什么?
如果nginx缓冲响应:它什么时候提供缓冲响应,给谁,为什么?
为什么默认情况下nginx打开proxy_buffering然后[警告]如果它实际上缓冲了响应?
响应何时触发该选项?当需要> 几秒钟(多少?)来提供响应时?这个可以配置吗?
TIA,ngw。
我正在尝试在我的 Ubuntu机器上设置Madsonic并在它前面运行 Nginx。问题是,当我尝试通过 Web 界面上传内容时,我不断收到此警告:
31115#0: *14 a client request body is buffered to a temporary file
Run Code Online (Sandbox Code Playgroud)
这也解释了为什么上传窗口上的进度条不起作用。这是我的相关 Nginx 配置:
# proxy the madsonic server here
location / {
proxy_pass https://madsonic-server/;
proxy_redirect off;
proxy_buffering off;
proxy_request_buffering off;
allow all;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
client_body_buffer_size 0;
client_max_body_size 0;
proxy_max_temp_file_size 0;
proxy_read_timeout 18000;
proxy_send_timeout 18000;
gzip off;
}
Run Code Online (Sandbox Code Playgroud)
我目前使用的是 Nginx 1.9.12。
我想要实现的是让 Nginx 根本不使用请求正文缓冲区, …
我使用带有 Hyper-V 的 Windows Server 2008 R2 和运行 Ubuntu 12.04 LTS 的来宾。
如何在 Windows Server 2008R2 和运行 Ubuntu 12.04 的来宾之间共享剪贴板?
更新
我需要什么协议来连接这些机器?我想在 Ubuntu上按ctrl+ c,然后在 Windows Server 上按ctrl+v并以这种方式复制文本。
现在我使用 WinSCP。所以我用文本创建一个文件,然后复制这个文件。这并不容易和快速。
我从 MysqlTunner.pl 收到此消息:
join_buffer_size >= 4 M 不建议这样做
另一方面,我在 Debian 的 my.cnf 指南中阅读了有关 jont_buffer_size 的内容:
此缓冲区用于优化完整 JOIN(没有索引的 JOIN)。在大多数情况下,这种 JOIN 对性能非常不利,但将此变量设置为较大的值会降低性能影响。有关完整 JOIN 的计数,请参阅“Select_full_join”状态变量。如果找到完全连接,则按线程分配
所以我想知道我应该相信哪一个?目前,我已将 join_buffer_size = 64M 设置为解决查询未特别优化的高流量站点的可伸缩性问题的努力的一部分。我很欣赏你在这方面的提示。
我们的服务器运行良好,但是当备份或其他扫描过程运行时,它会占用整个服务器。类似的东西clamd会运行并扫描许多文件。虽然我们预计性能会很慢,但它正在扼杀我们的缓存,最终结果是我们没有得到一个可以做任何事情的系统。
有没有办法为单个命令禁用磁盘/磁盘缓存?这个想法是像这样运行它:
# ./nocache clamd
Run Code Online (Sandbox Code Playgroud)
然后,在运行时,clamd它不会在读取系统上的所有文件时冲击已准备好的缓存。
我们看到以下情况:
[root@primary data]# netstat -s | grep buffer ; sleep 10 ; netstat -s | grep buffer
20560 packets pruned from receive queue because of socket buffer overrun
997586 packets collapsed in receive queue due to low socket buffer
20587 packets pruned from receive queue because of socket buffer overrun
998646 packets collapsed in receive queue due to low socket buffer
[root@primary data]#
Run Code Online (Sandbox Code Playgroud)
请记住,以上是一个刚重新启动的盒子......大约 1 小时的正常运行时间。我们最近有一个盒子已经过期了 2 个月,这些计数器将达到数百万(XXX 百万)。
我们尝试过更改各种 sysctl 变量...
以下是我认为相关的 sysctl 变量:
net.core.rmem_max = 16777216
net.core.wmem_max = …Run Code Online (Sandbox Code Playgroud) 如何防止 Nginx 缓冲我的 uwsgi 应用程序的输出?对于我的彗星式应用程序,我使用的是长轮询,并且请求现在已缓冲。
我试图减小缓冲区的大小,但不允许将uwsgi_buffer_size和设为uwsgi_buffers0。也uwsgi_max_temp_file_size不起作用(尽管手册建议这样做)。
我怎样才能做到这一点?
当进程在 Linux 虚拟机上调用“connect”时,我看到错误消息“没有可用的缓冲区空间”。我在追查原因时遇到了麻烦-希望有人可以提供帮助!
我检查了以下内容:
(1) 文件句柄:
cat /proc/sys/fs/file-nr
4672 0 810707
Run Code Online (Sandbox Code Playgroud)
我正在阅读它(已分配,未使用,可用),所以这看起来不错。
(2) 套接字或 TCP 内存:
cat /proc/sys/net/ipv4/tcp_mem
191889 255854 383778
cat /proc/net/sockstat
sockets: used 579
TCP: inuse 169 orphan 0 tw 245 alloc 187 mem 5
UDP: inuse 31 mem 4
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
Run Code Online (Sandbox Code Playgroud)
读到这里总共只有 579 个正在使用的套接字,页面总数远低于最大值。
Google 上显示了许多随机 TCP 调整 - 我希望在答案中是 (1) 我即将用完的资源,(2) 如何确定当前值以及 (3) 如何调整天花板。我发现的大多数页面都缺少除 (3) 之外的所有内容!
** 更新 #1 **
在 Flup 的建议下,我在它发生时做了一个 systrace(使用 ping):
socket(PF_INET, SOCK_DGRAM, …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多帖子和手册,试图找出如何在 Ubuntu 上增加 MySQL 5.6 中的内存,其中说有 3 种方法:
我假设 2 和 3 会在 MySQL 重新启动时丢失,剩下 1。
问题是,我的 /etc/mysql/my.conf 中没有这样的设置。
conf 文件中不存在字符串“inno”,“buffer_size”或“buffer-size”也不存在(但“key_buffer”在那里)。
我通过以下方式安装它:
# apt-get install mysql-server-5.6
Run Code Online (Sandbox Code Playgroud)
我可以改变价值的任何想法?
我是否以某种方式在没有 InnoDB 引擎的情况下安装了 MySQL?
我在看错误的文件吗?
/etc/mysql 下还有一些其他的 .cnf 文件,但它们也没有 innodb 之类的东西。
mysql> show variables like 'inno%'
:
innodb_buffer_pool_size | 134217728 |
Run Code Online (Sandbox Code Playgroud)
所以看起来 InnoDB 已安装,我只是找不到它的配置文件在哪里。
任何帮助表示赞赏。
我想知道是否可以看到哪个应用程序正在使用我的 ram 缓冲区和缓存。当数据从缓存中删除时,内核中是否还指定了任何时间。我的 Ram 被缓冲区和缓存完全使用,它也开始吃掉交换。
free -m 的输出:
$ free -m
total used free shared buffers cached
Mem: 14034 13878 156 0 10 11362
-/+ buffers/cache: 2505 11528
Swap: 8187 478 7709
Run Code Online (Sandbox Code Playgroud) 我一直在寻找这个问题的答案,但在任何地方都找不到。
我想减少每个数据库连接的内存使用量。以下是 mysql 调优器目前对我的一个数据库的内存使用情况的描述:
[--] Physical Memory : 985.2M
[--] Max MySQL memory : 950.4M
[--] Other process memory: 0B
[--] Total buffers: 292.0M global + 18.8M per thread (35 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 310.8M (31.55% of installed RAM)
[!!] Maximum possible memory usage: 950.4M (96.47% of installed RAM)
Run Code Online (Sandbox Code Playgroud)
可以看到每个线程的内存使用量相当高18.8M。这是我的其他服务器之一的输出:
[--] Total buffers: 400.0M global + 2.8M per thread (250 max threads) …Run Code Online (Sandbox Code Playgroud) 当您向磁盘请求数据时,它通常首先被传输到磁盘控制器中的磁盘缓冲区,然后被发送到 RAM(并因此存储在内存中)。我只是想知道首先拥有缓冲区(这实际上是一个额外的步骤)有什么好处。
*edit-> 还有,有人能解释一下 RAID 控制器应该做什么吗?
buffer ×12
linux ×4
nginx ×3
cache ×2
hard-drive ×2
memory ×2
mysql ×2
copy ×1
database ×1
filesystems ×1
hyper-v ×1
innodb ×1
mariadb ×1
networking ×1
performance ×1
raid ×1
sysctl ×1
tcp ×1
ubuntu ×1
ubuntu-12.04 ×1
uwsgi ×1