有没有一种快速的方法来理解 Linux 上的“存储”类型?它是 HDD 还是 SSD(或 NVMe)?众所周知,主机是物理机而不是虚拟机。我首先想到的是目录rotational
下的标志/sys/block/<device>/queue/
。但根据我的经验,即使对于 SSD 设备,它也可能包含“1”值。第二种更现实和真实的方式是延迟。测量起来有点困难(有些使用 /proc/diskstats),但看起来更可取。
还有其他方法吗?值得一提的是,我不需要知道“存储”的确切模型,只需要知道它的类型。
在典型的 Linux 机器上,您可以通过修改位于 的文件来更改内核配置/proc/*
。
例如,对于accept_dad
特定网络接口(例如eth0
)的 IPv6 参数,您需要修改以下文件:
/proc/sys/net/ipv6/conf/eth0/accept_dad
Run Code Online (Sandbox Code Playgroud)
但是,正如我最近发现的,有一个广泛传播的工具,sysctl
它具有相同的目的,并且工作原理如下:
sysctl -w net.ipv6.conf.eth0.accept_dad=1
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们什么时候应该使用哪种工具?我的直觉告诉我,如果您知道自己在做什么,则应该直接写入文件,但是,如果您想要验证而不需要什么,则应该使用sysctl
.
由于sysctl
是我们可以直接控制的东西的另一层,我认为通过使用它,我们将自己暴露在潜在的错误中,而这些错误是通过直接写入文件来避免的。
我有一个问题,即进程的最大文件大小与用户的 ulimit 不同。这个进程的日志文件基本没有增长超过524288
过程:
less /proc/20238/limits
Limit Soft Limit Hard Limit Units
...
Max file size 524288 524288 bytes
...
Run Code Online (Sandbox Code Playgroud)
极限:
ulimit -a
...
file size (blocks, -f) unlimited
...
Run Code Online (Sandbox Code Playgroud)
据我所知,启动进程的脚本中没有设置 ulimit 。
我也看过,/etc/security/limits.conf
但只有条目nofile
和nproc
问:你知道还有什么可以设置文件大小限制吗?
如果有任何帮助,这里是启动过程的擦洗版本:
nohup java $WALLET_OPTS -DOracleName="FileSender" -DAPP=FILE_SDR -Dapp_props=$APP_PROPS -Dfile_name=${FILE_NAME} -XX:+UseParallelGC -XX:+DisableExplicitGC -XX:-EliminateLocks $APPMEM -DDEBUG_MQSERVER=TRUE -classpath $类路径 com.some.path.FileSdrSrv 10 1>> $APP_LOG/filesdr.log 2>&1 &
java 文件也没有设置 ulimit。
我注意到,当我查看输出时,/proc/diskstats
读取的总时间、写入的总时间和执行 IO 的总时间之间存在差异。例如,我看到一个条目/proc/diskstats
是:
$ cat /proc/diskstats
...
8 0 sda 944150584 590524 235547588959 780672196 833280352 534699043 322507689696 3472000824 1 812190100 4246357772
...
Run Code Online (Sandbox Code Playgroud)
根据https://www.kernel.org/doc/Documentation/iostats.txt上的文档,
字段 4 -- 读取花费的毫秒数 这是所有读取花费的毫秒总数(从 __make_request() 到 end_that_request_last() 测量)。
字段 8 -- 写入花费的毫秒数 这是所有写入花费的毫秒总数(从 __make_request() 到 end_that_request_last() 测量)。
字段 10 -- 花费在 I/O 上的毫秒数 只要字段 9 不为零,该字段就会增加。
因此,我希望第十个字段是第四个和八个字段的总和,因为我希望总 IO 时间是阅读时间和写作时间的总和。但是,我从来没有注意到这种情况,而且我一直观察到第四和第八个字段的总和大于第十个(例如,在上面的行中 (780672196 + 3472000824 - 812190100 = 3440482920).我想知道是否有人可以解释为什么这些数字不同,似乎第十个字段试图捕获与第四个和第八个字段的总和不同的东西。
我对于 shmmax 中的最大值应该设置多少有一个模糊性。
查看我的系统统计数据后,它显示以下内容:
#cat /proc/sys/kernel/shmmax
18446744073692774399
#ipcs -l
------ Messages Limits --------
max queues system wide = 3675
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250 …
Run Code Online (Sandbox Code Playgroud) 我有一个无法应对负载的 docker 容器。
我需要增加 in 的值,/proc/sys/net/core/somaxconn
但我无法这样做,因为容器未在特权模式下运行。
自从创建 docker 文件以来,对 nignx 和 php 配置进行了一些调整。
是否可以在不丢失我已经进行的配置更改的情况下以特权模式重新启动容器?
尝试获取一些磁盘性能指标(特别是使用 munin),发现 /proc/diskstats
不存在。
尝试过,yum provides '*/diskstats'
但除了 munin 什么都没找到。
CentOS 6.7 版(最终版)
uname -a
Linux domain.com 2.6.32-042stab112.15 #1 SMP Tue Oct 20 17:22:56 MSK 2015 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
那么,我该如何解决呢?
proc ×7
linux ×4
sysctl ×2
docker ×1
drive ×1
io ×1
monitoring ×1
performance ×1
rhel5 ×1
shmmax ×1
statistics ×1
storage ×1
ulimit ×1