小编che*_*vim的帖子

#!/bin/sh 与 #!/bin/bash 的最大可移植性

我通常使用 Ubuntu LTS 服务器,从我理解的符号链接/bin/sh/bin/dash. 许多其他发行版虽然符号链接/bin/sh/bin/bash.

#!/bin/sh由此我了解到,如果脚本在顶部使用,它可能不会在所有服务器上以相同的方式运行?

当您希望在服务器之间最大程度地可移植这些脚本时,是否有建议将哪个 shell 用于脚本?

linux shell bash sh

37
推荐指数
2
解决办法
6004
查看次数

haproxy stats 后端限制说明

我的相关部分/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?

haproxy

8
推荐指数
1
解决办法
9877
查看次数

强制请求错过缓存但仍存储响应

我有一个缓慢的网络应用程序,我在它前面放置了 Varnish。所有页面都是静态的(它们不会因不同的用户而变化),但它们需要每 5 分钟更新一次,以便包含最近的数据。

我有一个简单的脚本 ( wget --mirror),它每 15 分钟抓取一次整个网站。每次爬行大约需要 5 分钟。爬网的目的是更新 Varnish 缓存中的每个页面,这样用户就不必等待页面生成(因为所有页面都是最近生成的,这要归功于蜘蛛)。

时间线如下所示:

  • 00:00:00:缓存已刷新
  • 00:00:00: Spider 开始爬行以使用新页面更新缓存
  • 00:05:00: Spider完成抓取,所有页面更新至00:15:00

0:00:00 到 0:05:00 之间的请求可能会访问尚未更新的页面,并且将被迫等待几秒钟以等待响应。这是不能接受的。

我想做的是,也许使用一些 VCL 魔法,总是将来自蜘蛛的请求转发到后端,但仍将响应存储在缓存中。这样,用户将永远不必等待页面生成,因为没有 5 分钟的时间窗口,其中部分缓存是空的(可能除了在服务器启动时)。

我怎样才能做到这一点?

cache varnish

7
推荐指数
1
解决办法
2546
查看次数

由于以太网“重置适配器”,VirtualBox VM 网络挂起

我有一个使用以下设置在主机上创建的 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 …

networking ethernet virtualbox

7
推荐指数
1
解决办法
1万
查看次数

apache httpd 每 24 小时重启一次

我有一个 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)

任何想法为什么会发生这种情况或我接下来应该看哪里?

uptime apache-2.2

6
推荐指数
1
解决办法
2949
查看次数

dig 可以工作,但 ping 无法解析主机

我已经为主机(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)

domain-name-system

6
推荐指数
1
解决办法
2万
查看次数

linux中文本文件中IP的“按计数分组”

我有一个巨大的文本文件,其中包含 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 次,第二次出现一次,最后一次出现两次。

我希望能够在巨大的日志文件中做到这一点,显然是以自动化的方式。是否可以?

谢谢

linux text analysis

5
推荐指数
1
解决办法
5040
查看次数

在生产服务器上调试卡住的 apache/php 线程

我有一个带有 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土地有类似的技术吗?

php troubleshooting threads dump apache2

5
推荐指数
1
解决办法
4717
查看次数

如何在 curl 中禁用 keepalive

我试图弄清楚如何在通过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 …

networking http keepalive curl

5
推荐指数
2
解决办法
1万
查看次数

在 USB 驱动器上存储 100k 文件的最佳文件夹结构

我需要在 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。

linux filesystems directory usb archive

3
推荐指数
1
解决办法
518
查看次数