什么内核参数或其他设置控制可以在 Linux 服务器上打开的最大 TCP 套接字数?允许更多连接的权衡是什么?
我注意到在使用ab对 Apache 服务器进行负载测试时,很容易最大化服务器上的开放连接。如果你不使用 ab 的 -k 选项,它允许连接重用,并让它发送超过 10,000 个请求,那么 Apache 会处理前 11,000 个左右的请求,然后停止 60 秒。查看 netstat 输出显示 11,000 个连接处于 TIME_WAIT 状态。显然,这是正常的。出于TCP 可靠性的原因,即使在客户端完成连接后,连接也会保持打开的默认值 60 秒。
这似乎是对服务器进行 DoS 的一种简单方法,我想知道它的常用调整和预防措施是什么。
这是我的测试输出:
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The …
Run Code Online (Sandbox Code Playgroud) 我已经设置了 Logrotate 来每晚轮换我的 JBoss Application Server 4.2.2.GA 日志。在轮换日志文件并且 JBoss 再次开始写入它们之后,新日志文件以与前一个日志文件中的字符一样多的 NUL 字符开头,然后是新的日志消息。例如,如果 JBoss server.log 文件的长度为 5000 字节,那么在轮换后,新的 server.log 文件将以 5000 个 NUL 字符开头。几天后,server.log 以 NUL 字符开始,相当于前几天所有日志文件中字符的总和。似乎 JBoss 正在记住它在日志文件中的位置,并在截断的文件中从它停止的地方开始。这是我的 JBoss 的 logrotate 配置:
/apps/jboss-4.2.2.GA/server/default/log/*log {
daily
rotate 30
compress
notifempty
copytruncate
missingok
nocreate
}
Run Code Online (Sandbox Code Playgroud)
我无法每晚重新启动 JBoss,因为那会导致停机时间过长。我也不能使用 log4j DailyRollingFileAppender,因为它不会删除旧的日志文件。有没有人让 logrotate 与 JBoss 一起正常工作?
如何快速选择并登录需要通过ssh访问的多台主机?我正在构建一个如下所示的 shell 脚本,用于dialog
从命令行显示主机菜单,但我很好奇是否有更好的方法。
#!/bin/dash
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
while [ 1 ]
do
dialog --menu "Select Host" 0 0 0 \
"hostname1" "Host description 1" \
"hostname2" "Host description 2" \
"hostname3" "Host description 3" 2> $tempfile
HOSTNAME=`cat $tempfile`
if [ "x" = "x$HOSTNAME" ]; then
break
fi
ssh $HOSTNAME
done
Run Code Online (Sandbox Code Playgroud) 我想配置 bash 来分页所有命令的输出。本质上,我希望 bash 的行为就像我输入的每个命令都以 '| 结尾一样。较少的'。这可能吗?
我试图解决一个常见的烦恼:当 SSH 连接到远程服务器时,我经常做的事情产生的输出比我预期的要多得多。例如,使用一种过于笼统的模式对大型日志文件进行 grep 处理。当垃圾翻滚时,我坐在那里敲击 ^C 并希望我记得少用管道。到目前为止,我最好的想法是尝试将我的 shell 配置为始终页面输出,我问了另一个问题。除此之外,我只有不太理想的解决方案:
你做什么工作?
默认情况下,Tomcat 似乎为每个响应发送一个 ETag 标头。由于此处概述的原因,我想禁用这些。我知道我可以在我的 Apache 配置中删除它们,但是有什么方法可以在 Tomcat 端禁用它们吗?
我已将 Postfix 配置为使用 SpamAssassin spamd 守护进程过滤邮件。我最近注意到一些垃圾邮件会发送到我的收件箱,但没有添加 SpamAssassin 标头。我发现这一点是因为我每天都有一个 cron 作业来更新 SpamAssassin 并sa-update
重新启动 spamd。当 Postfix 在 spamd 恰好重新启动时收到邮件时,它会在不进行过滤的情况下传递该邮件。
我的解决方案是更改 cron 作业,在重新启动 spamd 之前停止 Postfix,然后重新启动。这是最好的解决方案吗?我可以以某种方式告诉 Postfix 暂停所有投递吗?我可以更改对 spamd 的调用,使其阻塞直到 spamd 返回吗?
这是我的 SpamAssassin 行/etc/postfix/master.cf
:
spamassassin unix - n n - - pipe user=nobody argv=/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Run Code Online (Sandbox Code Playgroud)
postsuper -h ALL
我找到了使用搁置传递的参考,但这似乎只保留当前在 Postfix 队列中的消息。我发出后收到的新消息postsuper -h ALL
仍然正常发送。