我通常使用 Ubuntu LTS 服务器,从我理解的符号链接/bin/sh到/bin/dash. 许多其他发行版虽然符号链接/bin/sh到/bin/bash.
#!/bin/sh由此我了解到,如果脚本在顶部使用,它可能不会在所有服务器上以相同的方式运行?
当您希望在服务器之间最大程度地可移植这些脚本时,是否有建议将哪个 shell 用于脚本?
我的相关部分/etc/haproxy/haproxy.cfg是:
global
maxconn 30000
...
defaults
...
frontend frontend_for_all_sites
maxconn 22000
mode http
bind *:80
acl acl_hostname_www hdr_dom(host) www.example.com
acl acl_hostname_static hdr_dom(host) static.example.com
use_backend www_backend if acl_hostname_www
use_backend static_backend if acl_hostname_static
backend www_backend
server www 127.0.0.1:9090 maxconn 500
backend static_backend
server s 127.0.0.1:8080 maxconn 5000
Run Code Online (Sandbox Code Playgroud)
因此,我有 2 个后端,每个后端只有 1 个后端,没有负载平衡,只是根据请求的主机名将请求代理到不同的后端。
在www后端我将 maxconn 设置为 500,在static后端我将其设置为 5000。
统计页面现在如下所示:
我的问题是两个后端的“后端限制”2200 代表什么?据我了解,这个值是 22000 maxxconn 上的 10% frontend_for_all_sites。这个 2200 是否意味着后端将处理的最大连接数为 2200,超过该值 haproxy 将返回 503?
我有一个缓慢的网络应用程序,我在它前面放置了 Varnish。所有页面都是静态的(它们不会因不同的用户而变化),但它们需要每 5 分钟更新一次,以便包含最近的数据。
我有一个简单的脚本 ( wget --mirror),它每 15 分钟抓取一次整个网站。每次爬行大约需要 5 分钟。爬网的目的是更新 Varnish 缓存中的每个页面,这样用户就不必等待页面生成(因为所有页面都是最近生成的,这要归功于蜘蛛)。
时间线如下所示:
0:00:00 到 0:05:00 之间的请求可能会访问尚未更新的页面,并且将被迫等待几秒钟以等待响应。这是不能接受的。
我想做的是,也许使用一些 VCL 魔法,总是将来自蜘蛛的请求转发到后端,但仍将响应存储在缓存中。这样,用户将永远不必等待页面生成,因为没有 5 分钟的时间窗口,其中部分缓存是空的(可能除了在服务器启动时)。
我怎样才能做到这一点?
我有一个使用以下设置在主机上创建的 VM:http : //pastebin.com/raw.php?i=sevF5V7Z
它已经启动并顺利运行了几个月,但最近虚拟机失去了与外界的连接。发生这种情况时,登录了以下内容/var/log/messages:
23:54:14.260088+02:00 foobar kernel: [11347792.392529] e1000 0000:00:03.0 eth0: Reset adapter
Run Code Online (Sandbox Code Playgroud)
之后,每 8 分钟记录一次以下内容:
INFO: task kworker/0:2:15934 blocked for more than 480 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kworker/0:2 D ffff88029fc132c0 0 15934 2 0x00000000
ffff8800d3373d20 0000000000000046 ffff8800d3370740 ffff8800d3373fd8
ffff8800d3373fd8 ffff8800d3373fd8 ffff8801175560c0 ffff8800d3370740
ffff88029fc132c0 ffff8800d3372000 ffff8800d3370740 00000000ffffffff
Call Trace:
[<ffffffff81596bf2>] schedule_preempt_disabled+0x22/0x30
[<ffffffff815957dd>] __mutex_lock_slowpath+0xdd/0x170
[<ffffffff815951fa>] mutex_lock+0x1a/0x40
[<ffffffffa00f3f0e>] e1000_watchdog+0x7e/0x560 [e1000]
[<ffffffff810616ab>] process_one_work+0x12b/0x4d0
[<ffffffff81062f1d>] worker_thread+0x15d/0x460
[<ffffffff810681c3>] kthread+0xb3/0xc0
[<ffffffff8159eafc>] ret_from_fork+0x7c/0xb0
Run Code Online (Sandbox Code Playgroud)
VM 无法从外部访问(甚至无法 ping),我不得不从主机重新启动它。所有其他服务虽然仍在运行。
eth0: Reset adapter …
我有一个 Apache/2.2.22 (Linux/SUSE),它每天在同一时间自动重新启动。我没有配置对任何用户执行此操作的 cron 作业。
我开始收集状态页面的详细快照,从中我发现:
Restart Time: Friday, 31-Jan-2014 12:15:03 EET
Restart Time: Saturday, 01-Feb-2014 12:15:04 EET
Restart Time: Sunday, 02-Feb-2014 12:15:05 EET
Restart Time: Monday, 03-Feb-2014 12:15:06 EET
Run Code Online (Sandbox Code Playgroud)
从状态页面的详细快照可以看出,在重新启动之前没有发生重要的流量。
对于每次重新启动,我都会得到以下内容,/var/log/messages而没有任何其他兴趣:
2014-02-03T12:15:02.576970+02:00 foobar systemd[1]: Reloading apache.
2014-02-03T12:15:03.225024+02:00 foobar start_apache2[15393]: Syntax OK
2014-02-03T12:15:03.298169+02:00 foobar systemd[1]: Reloaded apache.
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生这种情况或我接下来应该看哪里?
我已经为主机(admin.example-preprod.foobar.it使用 IP 100.100.100.100)配置了 DNS 设置,但它并没有从我尝试的每台服务器上进行解析(对某些服务器来说是这样)。
例如,我的服务器使用以下 3 个 DNS 服务器:
foobar@server:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 200.200.200.1
nameserver 200.200.200.2
nameserver 200.200.200.3
Run Code Online (Sandbox Code Playgroud)
dig对他们所有人都有效。
第一的:
foobar@server:~$ dig admin.example-preprod.foobar.it @200.200.200.1
; <<>> DiG 9.9.5-3ubuntu0.7-Ubuntu <<>> admin.example-preprod.foobar.it @200.200.200.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6540
;; flags: qr aa rd; …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的文本文件,其中包含 IP 地址:
123.33.22.33
221.23.128.2
123.33.22.33
92.222.192.12
92.222.192.12
123.33.22.33
Run Code Online (Sandbox Code Playgroud)
我可以将其排序为:
123.33.22.33
123.33.22.33
123.33.22.33
221.23.128.2
92.222.192.12
92.222.192.12
Run Code Online (Sandbox Code Playgroud)
并看到(用肉眼)第一个 IP 出现 3 次,第二次出现一次,最后一次出现两次。
我希望能够在巨大的日志文件中做到这一点,显然是以自动化的方式。是否可以?
谢谢
我有一个带有 apache httpd 和 PHP 的 linux 系统,它使用LoadModule php5_module /usr/lib/apache2/modules/libphp5.so.
我已经启用了 apache 的 mod_status 模块,我看到一个特定的线程从昨天开始就一直在做某事。我还通过ps -axu | grep apache在许多线程中执行哪个给我特定的卡住线程来确认这一点:
www-data 5636 0.0 0.1 423556 23560 ? S XXXXX 0:04 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)
请注意,XXXXX 类似于昨天的 Jan02。此外,pid (5636) 与我在 apache 的 mod_status 页面中看到的卡住线程的 pid 相匹配。
我的问题是:我怎样才能做一个线程转储或类似的事情来查看这个东西在 PHP 代码中的确切位置?也许它正在等待某些东西(I/O、网络、数据库),但我不知道是什么。
在 Java 世界中,我会做一个kill -3 pid很好的可读线程转储,它会清楚地向我展示该特定线程的确切位置。php土地有类似的技术吗?
我试图弄清楚如何在通过curl.
这是我的目标服务器:
- Ubuntu 18.04.2 LTS
- 4.15.0-47-generic
- HA-Proxy version 1.8.19-1ppa1~bionic 2019/02/12
Run Code Online (Sandbox Code Playgroud)
这是我发布的客户端 1 curl(香草安装):
- Ubuntu 16.04.3 LTS
- 4.4.0-62-generic
- curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
Run Code Online (Sandbox Code Playgroud)
这是我发布的客户端 2 curl(香草安装):
- Ubuntu 18.04 LTS
- 4.15.0-20-generic
- curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Run Code Online (Sandbox Code Playgroud)
要关闭 keepalive,我尝试使用-H "Connection: close",--no-keepalive并且--keepalive-time 1只有第一个选项似乎有效,但只能从客户端 1 使用。
在客户端 1 (Ubuntu 16) 上,连接没有保持打开状态,但在客户端 2 (Ubuntu 18) 上,连接保持打开状态,直到超时。我通过查看目标服务器watch -n …
我需要在 USB 驱动器中存储 100k 个文件(大约 40GB)。每个文件都有一个唯一的 int id(例如 45000)。
选项一是将所有文件放在一个文件夹中:
root/
root/1.pdf
root/2.pdf
root/3.pdf
...
root/567.pdf
root/568.pdf
root/569.pdf
...
root/10001.pdf
root/10002.pdf
root/10003.pdf
...
root/99998.pdf
root/99999.pdf
root/100000.pdf
Run Code Online (Sandbox Code Playgroud)
选项二是[1-9][0-9]*根据该 id创建文件夹层次结构:
root/
root/1/file.pdf
root/2/file.pdf
root/3/file.pdf
...
root/5/6/7/file.pdf
root/5/6/8/file.pdf
root/5/6/9/file.pdf
...
root/1/0/0/0/1/file.pdf
root/1/0/0/0/2/file.pdf
root/1/0/0/0/3/file.pdf
...
root/9/9/9/9/8/file.pdf
root/9/9/9/9/9/file.pdf
root/1/0/0/0/0/0/file.pdf
Run Code Online (Sandbox Code Playgroud)
哪个选项会更好地扩展?我可以理解第二个选项将需要大量文件夹,但每个文件夹最多包含 10 个文件夹和 1 个文件。维护不会成为问题,因为一切都将由应用程序控制。
请注意,这是 linux 上的 USB 驱动器,基于上述内容,我还想知道我应该使用 FAT32 还是 NTFS。