我有一个泄漏文件描述符的服务。它通过 systemd 进行管理。有没有一种方法可以在该服务遇到特定数量的文件描述符时重新启动该服务。任何指针都会非常有帮助。
pradeepchhetri's questions
昨天,在 hadoop 集群中调试时,我发现了一些奇怪的东西
# netstat -taupen | grep 54310
tcp 0 0 10.0.12.209:54310 10.0.12.209:54310 TIME_WAIT
您会注意到源 ip:port 与目标 ip:port 相同。这怎么可能。有人可以解释一下 tcp 层中的事情是如何工作的吗?
我正在提供一个包含静态内容的目录让我们说
|-index.html
|--a
| |-index.html
|--b
|-index.html
当我访问http://localhost/a - 目前它永久重定向到http://localhost/a/,它为http://localhost/a/index.html提供服务。
我希望在浏览器 url 从http://localhost/a更改为http://localhost/a /的情况下具有相同的行为。
当我在 Debian:Squeeze 中使用 ruby 模块时,我注意到一个 ssl 握手错误,open-uri
但它在 Debian:Wheezy 和 Debian:Jessie 上运行良好
这是我注意到的:
Debian 挤压
root@0fdf024c8c42:/# cat /etc/issue
Debian GNU/Linux 6.0 \n \l
root@0fdf024c8c42:/# irb
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A
from /usr/lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /usr/lib/ruby/1.9.1/net/http.rb:799:in `block in connect'
from /usr/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
from /usr/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
from /usr/lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /usr/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
from /usr/lib/ruby/1.9.1/net/http.rb:744:in `start'
from /usr/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'
from /usr/lib/ruby/1.9.1/open-uri.rb:775:in `buffer_open'
from /usr/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
from /usr/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
from /usr/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
from /usr/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
from /usr/lib/ruby/1.9.1/open-uri.rb:677:in `open'
from /usr/lib/ruby/1.9.1/open-uri.rb:33:in `open'
from (irb):2
from /usr/bin/irb:12:in `<main>'irb(main):003:0>
Debian Wheezy
root@d6d7e1af56d0:/# cat /etc/issue
Debian GNU/Linux 7 \n \l
root@d6d7e1af56d0:/# irb
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
=> #<StringIO:0x000000022aaec0>
Debian 杰西
root@405c251f32df:/# cat /etc/issue
Debian GNU/Linux 8 \n \l
root@405c251f32df:/# irb2.1
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
=> #<StringIO:0x00000001e45b78 @base_uri=#<URI::HTTPS:0x00000001e45ec0 URL:https://www.openssl.org>, @meta={"date"=>"Wed, 26 Aug 2015 11:56:57 GMT", "server"=>"Apache/2.4.7 (Ubuntu)", "strict-transport-security"=>"max-age=31536000; includeSubDomains", "accept-ranges"=>"bytes", "vary"=>"Accept-Encoding", "content-length"=>"2456", "content-type"=>"text/html; charset=UTF-8"}, @metas={"date"=>["Wed, 26 Aug 2015 11:56:57 GMT"], "server"=>["Apache/2.4.7 (Ubuntu)"], "strict-transport-security"=>["max-age=31536000; includeSubDomains"], "accept-ranges"=>["bytes"], "vary"=>["Accept-Encoding"], "content-length"=>["2456"], "content-type"=>["text/html; charset=UTF-8"]}, @status=["200", "OK"]>
我知道这与 ruby 版本无关,因为我尝试更新 ruby 版本但没有帮助。
今天我注意到我发现了以下内容:
如您所见,RAM 几乎是一半空闲,交换空间的使用率非常高。根据我的教科书知识,我曾经认为 Linux OS 试图充分利用 RAM,当它的 RAM 不足时,它会将一些使用最少的页面从 RAM 移动到交换空间。
如果我的理论知识不正确,有人可以向我解释一下,并解释一下它在 Linux 世界中的实际工作原理。
我有一个 ext4 卷,在特定目录中有很多文件。
每当我尝试在其中创建具有特定名称的文件时,都会收到“设备上没有剩余空间”错误。
$ touch /data/lake/http:____images__br037__319854_366_tp.jpg
touch: cannot touch ‘/data/lake/http:____images__br037__319854_366_tp.jpg’: No space left on device
如果我更改文件名的一个字母,它就可以工作。
这是该卷的磁盘使用情况和 inode 使用情况:
# df -h /dev/xvdf
Filesystem Size Used Avail Use% Mounted on
/dev/xvdf 985G 679G 256G 73% /data
# df -i /dev/xvdf
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvdf 65536000 24751661 40784339 38% /data
我还运行 fsck 以确保它不是磁盘损坏问题。
# e2fsck -y /dev/xvdf
e2fsck 1.42.9 (4-Feb-2014)
/dev/xvdf: clean, 24751661/65536000 files, 182020406/262144000 blocks
有人可以帮助我如何进一步调试它。
今天我注意到这样一个情况:
[[email protected] ~]#netstat -taupen | grep 54310
tcp 0 0 ::ffff:10.0.12.209:54310 ::ffff:10.0.12.209:54310 TIME_WAIT 0 0 -
您会注意到源套接字与目标套接字相同。可能吗 ?有人可以解释一下。
有谁知道如何使用 proc 文件系统获得有关 bios 设置的详细描述。我知道像这样的命令dmidecode
可以提供有关 bios 的信息,但它们提供的信息非常有限。
我注意到有时在尝试在某个随机端口上远程登录时,我观察到两种情况:
$ telnet example.com 3432
Trying 173.252.110.27...
$ telnet example.com 3432
Connection Refused.
有人可以解释一下两者有什么区别吗?
以下命令生成了由 PID 30661 打开的 unix 域套接字
$ sudo lsof -U -a -p 30661
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 30661 haproxy 7u unix 0xc784a000 0t0 3348210055 /var/lib/haproxy/stats.30660.tmp
我想要一个使用 lsof 内部选项的命令将输出作为“var/lib/haproxy/stats.30660.tmp”
我不想使用管道和其他工具来获取此输出。
运行ss -m
命令时,显示套接字的内存使用情况。我得到以下输出。
ESTAB 0 0 172.16.31.158:55266 115.114.106.17:imap2 mem:(r0,w0,f0,t0)
有人可以解释一下这四个字符 'r' 'w' 'f' 't' 在这里表示什么吗?
有没有办法配置某种检查以防止它在该主机组的某些主机中运行?我想要检查不要在主机组的所有主机上运行。
该命令tcp receive buffer
以字节为单位显示大小。
$ cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4001344
其中三个值分别表示最小值、默认值和最大值。
然后我试图找到tcp window size
using tcpdump 命令。
$ sudo tcpdump -n -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn and port 80 and host google.com'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:15:41.465037 IP 172.16.31.141.51614 > 74.125.236.73.80: Flags [S], seq 3661804272, win 14600, options [mss 1460,sackOK,TS val 4452053 ecr 0,nop,wscale 6], length 0
我得到的窗口大小14600
是 MSS 大小的 10 倍。
谁能告诉我两者之间的关系。
我正在浏览iostat
手册页。根据它,
%iowait
Show the percentage of time that the CPU or CPUs were idle during which the system
had an outstanding disk I/O request.
%idle
Show the percentage of time that the CPU or CPUs were idle during which the system
did not have an outstanding disk I/O request.
我不明白 iostat 是如何计算出 I/O 请求是否未完成的。
我知道我们可以使用 nagios 插件 notify-by-email 为任何类型的关键警报发送电子邮件。现在我希望每天发送一封电子邮件作为最近一天的严重警报的报告。有人可以帮我解决这个问题吗?
我正在使用守护程序工具运行 carbon-cache.py 和 carbon-aggregator.py。当我对 storage-schema.conf 进行一些更改并尝试重新启动 carbon-cache.py 时,我发现它非常频繁地变成僵尸。
root 3367 3366 0 03:23 pts/1 00:00:00 supervise carbon-aggregator
root 3371 3366 0 03:23 pts/1 00:00:00 supervise carbon-cache
root 3373 3367 3 03:23 pts/1 00:00:02 /usr/bin/python /usr/bin/carbon-aggregator.py --debug start
root 3379 3372 0 03:23 pts/1 00:00:00 multilog t /var/log/multilog/carbon-cache
root 3382 3368 0 03:23 pts/1 00:00:00 multilog t /var/log/multilog/carbon-aggregator
root 3638 3371 21 03:24 pts/1 00:00:00 [carbon-cache.py] <defunct>
有人可以告诉我可能是什么原因吗?
即使我没有连接到 Windows 操作系统中的任何网络,我也总是注意到路由表中的 IP 为“169.254.xx”。
在 Linux 中,当我列出我的路由表时。
$ ip route show
我得到一个条目
169.254.0.0/16 dev eth0 scope link metric 1000
有人能解释一下这个 IP 地址实际上是什么吗?它是否类似于 127.0.0.0/8 系列。
编辑:在 ec2 中,每个实例都可以通过向该 IP 发出 HTTP 请求来获取关于它们自己的元数据。
$ curl -s http://169.254.169.254/user-data/
那么有人可以告诉我这个 IP 地址实际分配给了谁吗?
有人能指出普通 CNAME 记录和 Amazon 的 Route 53 ALIAS 记录之间的异同吗??
我有以下设置:
我已经在两个负载均衡器 (HAProxy) 之间配置了高可用性,这样如果 HAProxy1 出现故障,浮动 IP 就会转移到另一个负载均衡器 HAProxy2,因此所有客户端都会从后端正在执行的 HAProxy2 获得响应LB sme 中间有两个webserver。这是为了在只有一个 HAProxy 的情况下消除单点故障。
每当我停止 HAProxy1 中的心跳时,浮动 IP 就会转到 HAProxy2。但我想配置为每当process haproxy
发生故障时,浮动 IP 都应分配给 HAProxy2。有人可以告诉我如何实施吗?
我正在尝试使用 netcat 连接到在我的本地主机上运行的 80 端口的 Nginx 服务器。但是,尽管我发送了任何标头(GET、POST、HEAD),但我一直收到相同的错误页面。有人可以向我解释为什么吗?
pradeep@pradeep-laptop:~$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc localhost 80
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
我正在运行上面相同的命令,但我仍然得到 html 页面。
pradeep@pradeep-laptop:~$ echo -n "HEAD / HTTP/1.0\r\n\r\n" | nc localhost 80
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
我还使用 netstat 命令检查了我的 nginx 服务器是否正在运行。输出如下:
root@pradeep-laptop:/# netstat -taupen| grep LISTEN | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 264102 13723/nginx