我的问题是关于使用 Nginx 作为另一个代理背后的代理。(有点混乱。)
我想设置 Nginx,以便它充当 npm 镜像的缓存代理服务器。这是链接:http : //eng.yammer.com/a-private-npm-cache/
在我的本地机器上,不受防火墙限制,以下配置工作正常:
proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
inactive=365d;
proxy_temp_path /var/cache/npm/tmp;
server {
listen 80;
server_name classen.abc.lan;
location / {
proxy_pass http://registry.npmjs.org/;
proxy_cache npm;
proxy_cache_valid 200 302 365d;
proxy_cache_valid 404 1m;
sub_filter 'registry.npmjs.org' 'classen.abc.lan';
sub_filter_once off;
sub_filter_types application/json;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想将它应用到位于附加防火墙后面的服务器。在日志中,我可以确认它访问了正确的上游 IP,但由于内部防火墙,请求失败。
我们有一个内部代理,我可以用它绕过防火墙,例如:
$ curl http://registry.npmjs.org
curl: (7) couldn't connect to host
$ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
... succeeds ...
Run Code Online (Sandbox Code Playgroud)
这个技巧不适用于 Nginx,因为它忽略了http_proxy环境变量。看了文档,还是想不通怎么修改配置,让它内部可以使用代理。
是否可以结合两种解决方案?重要的是缓存仍然有效,否则,您可以直接使用外部镜像 registry.npmjs.org。
也许,Nginx 应该使用内部代理(proxy.abc.lan)作为proxy_pass,但是内部代理如何知道应该将请求发送到外部 npm 镜像( …
我知道在 Unix 系统上,您可以保持 ssh 连接打开。
步骤1:创建ssh配置,例如:
Host <some.host.name>
ControlPath ~/.ssh/master-%r@%h:%p
ControlPersist yes
Run Code Online (Sandbox Code Playgroud)
步骤2:使用-M参数启动ssh。
Windows 下是否有类似的东西可以重用 ssh 连接?也许我看错了地方,但我没有找到关于这个主题的任何好的链接。
(我在 MingGW 环境中尝试了上面的方法(使用 MingGW 的 ssh 客户端)。在真正的 Unix 系统中,它应该在 中创建一个特殊的套接字文件~/.ssh,但 MingGW 似乎不支持该功能。)
Amazon 最近推出了EC2 Auto Scaling 的目标跟踪策略。
在我的生产服务中,我使用两个独立的自动扩展组来支持混合使用 Spot 和按需实例的混合自动扩展。我想要的是我的 CPU 使用率不应超过 70%,并且应尽可能使用 Spot 实例,但在必要时回退到按需实例。
首先,我将两个 Auto-Scaling 组(Spot 和 On-Demand)设置为针对 70% CPU 负载使用目标跟踪,并将两个组的最小大小设置为 1。我的服务上的流量是相当可预测的(没有突然增加,白天流量较多,夜间流量很少)。
某一时刻,有两个按需实例和两个 Spot 实例正在运行。系统刚刚缩容,因为五台服务器的CPU负载变得非常低(大约35%)。对于四台服务器,CPU 负载上升,几分钟后短暂突破 70% 大关(当时可能有非常小的流量提升)。
系统保守地决定再次扩展,但由于两个自动扩展组同时独立做出决定,因此启动了两个实例(一个 Spot 实例和一个 On-Demand 实例)。此时,已有六台服务器正在运行。一段时间后,它再次缩小规模,最终达到运行四个实例的设置。
为了避免这种影响,我现在更改了设置,如下所示:
我的假设是它应该有助于防止我描述的情况。我预计 On-Demand 组会比 Spot 组更早缩小规模(无论如何,这是可取的,因为它们成本更高)。我预计 Spot 实例会更快地扩展,这应该可以防止按需组不必要的扩展。
这是我的期望,但我没有在文档中找到太多细节来证实它。有人可以详细说明新的目标跟踪扩展如何工作,以及如何将其应用到具有 Spot 和按需实例的混合设置吗?
问题:
systemd 有一个OOMScoreAdjust选项,它允许调整启动进程的 oom-killer 分数。
引用systemd 文档:
OOMScoreAdjust=为已执行的进程设置内存不足杀手的调整级别。取一个介于 -1000(禁用此进程的 OOM 终止)和 1000(在内存压力下很可能终止此进程)之间的整数。有关详细信息,请参阅proc.txt。
在我的设置中,我在 AWS 上部署了一个 NodeJs 服务器。除了 Node 服务器之外,EC2 实例上没有其他运行(除了监控和基本的 OS 进程)。有 ELB 运行状况检查,最终应该会替换损坏的 EC2 实例。
不过,我想知道如果OOMScoreAdjust存在内存问题,增加内核是否更喜欢杀死 Node 服务器进程是否被认为是一种好习惯,因为它可以自动重新启动。在 systemd 中,它可能如下所示:
OOMScoreAdjust=1000
Restart=always
Run Code Online (Sandbox Code Playgroud)
我不得不承认我的理解是有限的。我目前的理解是它很可能不会产生真正的影响,最好保留默认值:
不过,我很好奇是否有更了解的人已经考虑过了。启用它只会是 systemd 脚本中的一行。如果有疑问,我宁愿让内核杀死 Node 进程,而不是任何随机系统服务。
我正在使用带有 EPEL 存储库的全新安装的 CentOS 6.4 (x86-64)。
$ yum install nodejs
...
$ node -v
v0.10.5
Run Code Online (Sandbox Code Playgroud)
到目前为止,npm一切都很好,但是当我尝试安装时,我会收到以下错误消息:
$ yum install npm
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: ftp.halifax.rwth-aachen.de
* epel: mirror.fraunhofer.de
* extras: centos.psw.net
* updates: centos.psw.net
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package npm.noarch 0:1.2.17-5.el6 will be installed
--> Processing Dependency: npm(which) < 2 for package: npm-1.2.17-5.el6.noarch
--> Processing Dependency: npm(uid-number) < 1 for package: npm-1.2.17-5.el6.noarch …Run Code Online (Sandbox Code Playgroud) Redis 4 添加了主动内存碎片整理(来源:发行说明):
主动内存碎片整理。如果使用 Jemalloc 分配器(Linux 上的默认设置),Redis 能够在联机时对内存进行碎片整理。对于分配器无法将碎片保持得足够低的工作负载非常有用,因此唯一的可能性是 Redis 和分配器协作以对内存进行碎片整理。
在 Redis 5 中,该功能(现在称为版本 2)得到了改进:
来源 1:Redis 主要开发者 Salvatore Sanfilippo 的推文
主动碎片整理版本 2。对正在运行的服务器进行内存碎片整理是黑魔法,但 Oran Agra 改进了他过去的努力,现在它比以前效果更好。对于长时间运行且容易造成 Jemalloc 碎片的工作负载非常有用。
资料来源2:AWS发布Redis 5
上一版本的亮点之一是 Redis 获得了在线进行内存碎片整理的功能。它的工作方式非常聪明:Redis 扫描键空间,对于每个指针,询问分配器将其移动到新地址是否有助于减少碎片。此版本附带了所谓的主动碎片整理 2:它更快、更智能且延迟更低。此功能对于分配器无法将碎片保持得足够低的工作负载特别有用,因此策略是让 Redis 和分配器合作。为此,必须使用 Jemalloc 分配器。幸运的是,它是 Linux 上的默认分配器。
问题:假设您已经在使用 Jemalloc,有什么理由不总是设置activedefrag yes呢?
鉴于替代方案是重新启动实例来处理碎片(这是一个很大的问题),并且鉴于到目前为止我所看到的 activedefrag 的开销似乎相当低,该选项似乎太有用了,默认情况下无法禁用。
或者是否存在会损害性能的情况?