服务器和客户端都是64位Ubuntu 10.04 LTS。
相关应用程序是一个用于mmap()快速随机文件访问的自定义应用程序。其理想状态是整个文件缓存在 RAM 中。
网络连接是非常快的 10Gb 以太网。它是虚拟服务器刀片设置。
网络连接不会减慢速度,因为使用虚拟磁盘(iSCSI 到 SAN)时一切都表现出色。但是,当我们在 NFS 主目录挂载上运行应用程序时,性能就会下降。
Linux 内核似乎没有缓存任何内容。mmap()因此,它会一遍又一遍地读取访问所需的每个磁盘块。
NFS挂载是通过autofs完成的,它只有默认设置。/proc/mounts显示 NFS 安装已通过以下选项完成:
rw,relatime,vers = 3,rsize = 131072,wsize = 131072,namlen = 255,硬,proto = tcp,timeo = 600,retrans = 2,sec = sys,mountaddr = 192.168.11.52,mountvers = 3,mountproto = tcp,地址=192.168.11.52
如何让 Ubuntu 10.04 缓存该文件而不是一直重新加载它?
我想知道是否有办法控制 Nginx 中重定向的生命周期?
我们会在 CDN 中缓存 301 重定向一段特定的时间,比如说 20 分钟,并且 CDN 由标准缓存标头控制。默认情况下,Nginx 重定向没有 Cache-control 或 Expires 指令。这可能会导致重定向被缓存很长时间。通过具有特定的重定向生命周期,系统可以有机会自我纠正,因为知道即使是“永久”重定向也会不时发生变化。
另一件事是,这些重定向包含在 Server 块中,根据 nginx 规范,应在位置之前对其进行评估。
我尝试添加 add_header Cache-Control "max-age=1200, public"; 到重定向文件的底部,但问题是缓存控制被添加了两次 - 第一个来自后端脚本,另一个是由 add_header 指令添加的。
在 Apache 中,有一个环境变量技巧来控制重写的标头:
RewriteRule /taxonomy/term/(\d+)/feed /taxonomy/term/$1 [R=301,E=expire:1] 标头始终设置 Cache-Control“store, max-age=1200” env=expire
但我不知道如何在 Nginx 中实现这一点。
大约 2 周前,我为所有服务器购买了新的通配符 SSL 证书,并立即尝试通过替换旧的自签名证书设置来在服务器上进行设置。因此,我输入了新的详细信息,重新启动了 apache,并刷新了浏览器,但它仍然抱怨拥有自签名 SSL 证书。因此,我进一步调查,并通过从远程 Windows 服务器测试它来确认它不是我的浏览器或本地缓存,但它仍然提供旧的自签名证书(但链文件已成功更新)。我什至尝试重新启动服务器以尝试清除 apache 的 SSL 缓存或任何正在发生的事情,但也没有运气。
由于某些疯狂的原因,它在端口 444 上运行良好,如果我编辑该站点并将其更改为端口 443,它会返回到旧证书....:( 发生了什么事?不仅仅是端口 443 没有’顺便说一句,我已经测试了端口 92XX(因为这就是我的服务运行的端口),即使在新端口上创建新站点之后,它也会出现相同的错误。我还尝试将其中一个站点复制到另一个站点(新的,以前从未有过 ssl)服务器,它在那里工作正常:/
我如何清除 apache 的“SSL 缓存”或这里发生的任何事情(运行 Ubuntu 12.10 服务器)?
站点之一的配置:
<IfModule mod_ssl.c>
<VirtualHost *:9207>
DocumentRoot /var/www/ssl/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/ssl/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Nginx 设置为在 Unicorn 上运行的 Rails 应用程序的反向代理。
我的应用程序有一些公共页面,我想将它们缓存 60 分钟,因此我设置了 max-age 标头。
此外,我已将 proxy_cache 选项添加到 Nginx 中的服务器块中。
proxy_cache default;
Run Code Online (Sandbox Code Playgroud)
并定义了这个缓存
proxy_cache_path /var/www/nginx_cache keys_zone=default:10m max_size=500m;
Run Code Online (Sandbox Code Playgroud)
我已设置我的应用程序以将此标头添加到我的可缓存响应中
Cache-Control: max-age=3600, public
Run Code Online (Sandbox Code Playgroud)
当客户端第一次访问该页面时,将呈现该页面并返回响应。然而,在随后的请求中,nginx 不会减少 max-age 计数器。
因此,访问者可能会在页面过期前一分钟访问我的页面,这意味着他看到的是 59 分钟前的内容。但随后将此副本在他的浏览器中再保留 60 分钟,然后他就会获得新副本。
我可以让 Nginx 减去经过的时间,这样如果访问者访问已在 Nginx 缓存中 25 分钟的页面,则 max-age 将为 35 分钟(2100 秒)?
我使用 Nginx 作为多个服务器中多个应用程序的反向代理,并且尝试将通用缓存指令添加到每个应用程序的静态文件中。
我原来的配置是这样的:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
}
...
Run Code Online (Sandbox Code Playgroud)
要添加静态文件指令,我可以向每个位置添加嵌套位置,如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8081;
}
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8082;
}
}
Run Code Online (Sandbox Code Playgroud)
由于我有大约 30 个应用程序,因此我尝试将代码简化为如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
include static_file_config.conf;
}
location /app2{
...
proxy_pass http://127.0.0.1:8081/app2;
include static_file_config.conf;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以简化代码,这样我就不会以 30 个相同的静态文件位置结束?
请注意,每个应用程序都有自己的静态文件。
对于使用 nginx 作为缓存代理,有没有一种方法可以配置 2 个上游服务器,使其始终尝试第一个上游服务器,除非该服务器返回 404,并且只有在这种情况下它才会尝试第二个上游服务器?
我知道backup上游配置块中的选项,但只有在第一个服务器不可用时才尝试该服务器。我说的是第一台服务器是否可用,但只是特定请求的文件返回 404。
我想限制 Linux 服务器将 RAM 分配给磁盘缓存缓冲区,并使其闲置。(CentOS 5,如果重要的话)。我知道,即使只是缓存磁盘,使用每一滴可用的物理 RAM 也是理想的选择 - Linux 在这方面非常擅长。大多数时候我什至不会考虑尝试克服这一点。让我告诉你为什么我想(我不关心监控):
我的公司与第三方就某些虚拟机签订了合同,并且我们的每月账单中包含承诺的内存限制。超额费用非常昂贵。其中 2 个虚拟机运行一个应用程序,该应用程序在进程启动期间仅消耗RAM,但一旦稳定,使用率就会下降很多。开发人员向我保证,这就是这项服务应该做的事情,并且不会很快变得“更好”。因此,我为这些虚拟机配置的 RAM 约为正常运行模式下通常所需的 2 倍。一旦稳定,多余的东西就会被扔进缓冲区缓存,每个人都很高兴。除了财务人员。
我们的提供商根据我们为虚拟数据中心承诺的总量计算分配给缓冲区缓存的 RAM,因此我们每月支付费用。很多。我不相信我关心缓存的任何内容 - 我很乐意以更少的 RAM(即更少的缓存)运行并在文件访问上受到一些性能影响(我假设......)除非应用程序从头开始,需要 RAM 才能真正地交换来回。
因此,我正在寻找一种方法来告诉 Linux“嘿,只使用 1GB(或更好,x%)的可用 RAM 进行磁盘缓存缓冲,是的,继续浪费其余的!”。多年来我们可以节省大量资金,因为如果 RAM 实际上保持空闲并且没有分配给缓冲区,它就不会会计入我们承诺的金额,我们也不必“租用”它。但由于有些东西正在使用它,即使它只是缓冲区缓存,我们也要为此付费。
我搜索了很多地方,大多数都看到这样的问题:“天哪,为什么我的服务器几乎一直处于 100% 状态……”,人们对他们的监控/警报/nms 感到害怕,并从响应中获得教育 - 这不是我的问题; 10 年前我也有过同样的反应,但在这种情况下,我真的不想使用该 RAM,这样当应用程序不需要它时我就不必“支付租金”。
如果您想到其他方法来实现此目的,欢迎提供替代建议。
非常感谢...
我有一台 16GB RAM 的服务器,运行多个 Linux 虚拟机(大约 10 个),这些虚拟机执行多个不同的任务。这些机器,使用默认配置,将用缓存填满我给它们的最大内存。
即使这对于物理主机来说是理想的行为,但在我的设置中,该缓存实际上正在消耗无法从主机释放的真实主机 RAM,并迫使我为虚拟机设置相对较低的 RAM 量(不超过 )(16 - host cache)/number of vms。这是非常不可取的,因为系统失去了灵活性,无法处理来自具体虚拟机的零星 RAM 请求。
我想到的唯一方法是限制内核可用于缓存的 RAM 量(或使缓存更快过期),但我还没有找到任何有关如何执行此操作的文档。大多数论坛帖子都引用了 linuxatemyram.com 或类似的内容,而且我似乎也没有在 /proc/sys/vm/ 下公开任何相关参数。
也许有人可以对此提供一些见解?我将非常感激。
L2Arc 通常配置为在 SSD 上缓存随机旋转盘片读取。我设置此配置是为了加快目录遍历速度。
这是设置:
# zpool list -v
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
geek1 2.72T 1.18T 1.54T - 53% 43% 4.64x ONLINE -
sdc 1.36T 606G 786G - 54% 43%
sdd 1.36T 606G 786G - 53% 43%
log - - - - - -
zil 3.97G 0 3.97G - 0% 0%
cache - - - - - -
l2arc 32.0G 4.24G 27.8G - 0% 13%
Run Code Online (Sandbox Code Playgroud)
该机器有 20GB 内存:对于 Arc 来说足够了。
我希望find对文件系统的调用会加快很多。它的速度加快了 5 …
我正在寻找一种通过在 url 上添加特定注释来清除 nginx 缓存的方法。
假设我用 nginx 缓存了这个 url(项目):
http://mywebsite/render/render5.php?frame=1&image=nature-1920.jpg
Run Code Online (Sandbox Code Playgroud)
如果我想清除它,我必须添加:
http://mywebsite/render/render5.php?frame=1&image=nature-1920.jpg&purge=1
Run Code Online (Sandbox Code Playgroud)
如果我们在 URL 末尾添加,是否可以清除该 URL &purge=1?
我发现的所有教程都使用curl -X命令来清除特定项目,例如:
curl -X PURGE http://mywebsite/render/render5.php?frame=1&image=nature-1920.jpg
Run Code Online (Sandbox Code Playgroud)
https://scene-si.org/2016/11/02/purging-cached-items-from-nginx-with-lua/
我希望能够清除 nginx 缓存的项目(url),而无需使用curl -X命令。