在我们的应用程序中,我们使用 Hibernate 和 PostgreSQL 来存储数据。在我们的一个数据库表中,我们有一个鉴别器列,例如“TIPPSPIEL”。它是一个固定字符串,不能被任何用户操纵。
突然,我们在这张巨大的表格中出现了一个条目,其中有“TIPPQPIEL”而不是“TIPPSPIEL”。我们不知道这是怎么发生的。
有没有可能我们的硬盘在切换一位,所以我们的字母“S”不再编码为“1010001”而是突然变成硬盘上的“Q”,一位切换如下:1010011?
我不是硬盘方面的专家,有点物理,但我猜操作系统或磁盘有校验和和其他东西来确保这不会发生。
是否有可能只切换一位,所以我的文件向我显示字母“Q”而不是“S”?
更新:我们做了进一步的分析。我们的从数据库从主数据库(PostgreSQL 功能)获取其 WAL 记录。无论如何:我们的从服务器应该是同步的。但是从站在这一特定行上并不同步。我们可以看到它发生在几天前,没有用户对这个特定条目进行任何交互。所以它必须有点翻转。害怕!
我们每晚使用 pg_dump 来制作数据库的快照。我们用一个简单的命令就做了很长时间
pg_dump -Fc database_name
这大约需要一个小时,并生成一个 30+GByte 的文件。
我们怎样才能加快速度?
我运行 debian 挤压标准 Apache 安装 (2.2) 并使用 SSLClientCertificates 来授权用户。到目前为止,这工作正常。
但是我们注意到一些并行请求变慢了,并试图检查我的SSLSessionCache是否正常工作。
所以我检查了我的本地主机/服务器状态,它是这样写的:
SSL/TLS Session Cache Status:
cache type: SHMCB, shared memory: 512000 bytes, current sessions: 0
subcaches: 32, indexes per subcache: 133
index usage: 0%, cache usage: 0%
total sessions stored since starting: 0
total sessions expired since starting: 0
total (pre-expiry) sessions scrolled out of the cache: 0
total retrieves since starting: 0 hit, 0 miss
total removes since starting: 0 hit, 0 miss
Run Code Online (Sandbox Code Playgroud)
似乎正在运行,但无论我发出什么 SSL 请求,所有计数器都保持为 0,因此没有缓存任何会话。 …
我们在 Debian Lenny 系统上运行带有 iptables 的防火墙。我只向您展示我们防火墙的相关条目。
Chain INPUT (policy DROP 0 packets, 0 bytes)
target prot opt in out source destination
ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
target prot opt in out source destination
ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
LOGDROP …Run Code Online (Sandbox Code Playgroud) 上周我们的一台图像服务器出现了一些问题,需要一些帮助。查看我们的 munin 监控图:

我们正在运行 debian 挤压,我们有很多请求,因为这是我们的图像服务器之一。我们不使用 keep-alive(也许我们应该,但那是另一个话题)
这些数字是我们日志文件中每分钟的请求数:
所以你看,我们每分钟有很多请求,但由于大多数请求在 0-1 毫秒内提供服务,所以通常一切正常。
现在,正如您在我们的 munin 图形中看到的,munin 无法通过 munin 端口连接到此服务器并询问相关号码。连接失败了。由于服务器不会以任何方式(CPU、内存、网络)过载。它一定与我们的防火墙/tcp 堆栈有关。在 munin 插件连接失败时,我们在 100MBit 连接上只有 17MBit 的传入和传出流量。
您经常在这里限制 65k 的 tcp 连接,但这通常会产生误导,因为它指的是 16 位 tcp 标头并且属于每个 ip/端口组合 65k。
我们的 time_wait 超时设置为
net.ipv4.tcp_fin_timeout = 60
Run Code Online (Sandbox Code Playgroud)
我们可以降低它以更早地删除更多 TIME_WAIT 连接,但首先我想知道是什么限制了网络的可达性。
我们正在使用带有状态模块的 iptables。但是我们已经提高了 max_conntrack 参数。
net.ipv4.netfilter.ip_conntrack_max = 524288
Run Code Online (Sandbox Code Playgroud)
有没有人知道下周要查看哪些内核参数或如何诊断这个问题?
我们在几个 tomcat 前面运行一个 apache 反向代理。有时我们想知道请求被转发到哪个服务器。因为我们使用 mod_proxy_balancer。
我试过
\"%{X-Forwarded-Server}i\"
Run Code Online (Sandbox Code Playgroud)
但这不起作用。它显示了我的负载均衡器 (apache) 的名称
我如何记录选择了哪个工人?
apache-2.2 ×2
postgresql ×2
cache ×1
database ×1
hard-drive ×1
iptables ×1
linux ×1
logging ×1
mod-proxy ×1
pg-dump ×1
session ×1
ssl ×1
tcp ×1
time-wait ×1