我有一个 Ubuntu VM,在基于 Ubuntu 的 Xen XCP 中运行。它托管基于 FCGI 的自定义 HTTP 服务,位于nginx.
下从负载ab 第一CPU芯饱和,其余为欠载。
在/proc/interrupts我看来,CPU0 提供的中断比任何其他内核都多一个数量级。他们中的大多数来自eth1.
我可以做些什么来提高此 VM 的性能?有没有办法更均衡地平衡中断?
血腥细节:
$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux
$ lsb_release -a
没有可用的 LSB 模块。
分销商 ID: Ubuntu
描述:Ubuntu 11.04
发布:11.04
代号:natty
$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
283:113720624 0 0 0 0 0 0 0 xen-dyn-event … 我将 XenServer 与多个具有本地 postgres 数据库的虚拟机一起使用。即使所有应用程序都未使用且数据库处于空闲状态,每个虚拟机也会导致持续的存储网络流量,从而降低 iSCSI 存储设备的性能。
运行后,iotop我注意到 postgres stats 收集器进程进程以大约 2 MByte/s 的速率不断写入磁盘。
然后我通过编辑禁用了统计信息的收集/etc/postgresql/8.4/main/postgresql.conf:
#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------
# - Query/Index Statistics Collector -
track_activities = off
track_counts = off
...
Run Code Online (Sandbox Code Playgroud)
正如http://www.postgresql.org/docs/8.4/static/runtime-config-statistics.htm 中所建议的。
这消除了连续写入,但是关闭统计跟踪有什么缺点吗?
或者我应该将 pg_stat_tmp 目录放在 ramdisk 上以避免磁盘/网络流量?
系统是最新的 Debian 6.0.7(squeeze),带有 postgres 8.4 和大约 20 个数据库,大约有 50 个表,总转储文件大小小于 100 MB。
postgresql performance performance-tuning database-performance
我们有一个应用程序计划存储大约 1.1TB 的 XML 文件,平均大小为 8.5kb。
这些代表了 18 个月的滚动数据,每天创建大约 200,000 个新文件。
每个文件只会写入一次,然后有 3% 的机会在接下来的 18 个月内被读取少量 (<10) 次。
哪些 NTFS 选项对我们开放,有助于提高性能?
目前我们名单上的有:
关于碎片:我们计划使用 2k 集群大小来提高磁盘空间使用效率。每个文件将只写入一次(即没有文件编辑)。文件将在 18 个月后每天删除。
因此,我们认为碎片化不会是一个重大问题。
我有一个带有 8x10TB HDD 的 Ubuntu 16.04 备份服务器,通过 SATA 3.0 背板。8 个硬盘组装成 RAID6,正在使用 EXT4 文件系统。该文件系统存储了大量具有大量 SEEK 操作但 IO 吞吐量较低的小文件。事实上,每天都有许多来自不同服务器的小文件通过 rsnapshot 获取快照(多个 INODES 直接指向同一个文件。由于文件系统(60TB 网络)超过 50% 的使用率,我的性能非常差。目前,使用率为 75% 并且
du -sch /backup-root/
Run Code Online (Sandbox Code Playgroud)
需要几天(!)。机器有8核和16G内存。RAM 完全由 OS 文件系统缓存使用,由于 IOWAIT,8 个内核中的 7 个内核始终处于空闲状态。
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: …Run Code Online (Sandbox Code Playgroud) 对于 Linux 或 Windows 系统,你有什么技巧来优化你的 Subversion 服务器?
以下是我目前使用 HTTPS 服务于 Apache 并由使用 LDAP 身份验证的 Active Directory 支持的 Linux 系统的技巧。
什么是高负载、极其繁忙的内容流服务器的最佳 sysctl.conf 配置?服务器从远程服务器(如 amazon、s3 等)获取内容,然后使用 php 将内容动态流式传输给用户,而无需将其保存到硬盘上。php 使用 CURL 来获取文件,然后使用flush() 同时流式传输它,所以没有太多的硬盘工作......只有网络和带宽。
该服务器为四核至强,具有 1Gbit 全双工 NIC、8GB RAM 和 500GBx2 RAID。服务器内存使用率和 CPU 负载非常低。
我们在其上运行 debian lenny 和 lighttpd2(是的,我知道它还没有发布 :-) )和 php 5.3.6 和 php fastcgi 和 spawn-fcgi 绑定在 4 个不同的 unix 套接字上,每个套接字有 20 个孩子。最大 fcgi 请求为 20,在 lighttpd2 配置中使用 mod_balancer 模块来平衡这 4 个 SQF(短队列优先)配置中的套接字之间的 fastcgi 请求。
我们的服务器使用大量带宽,即网络连接一直很忙。就在 100 到 200 个并行连接之后,服务器开始变慢并最终变得无响应,开始出现连接超时错误。当我们有 cpanel 时,我们从来没有出现超时错误,所以它不可能是脚本问题。应该是网络配置问题。
lighttpd2 配置:worker processes = 8,keep alive requests 为32,keep alive idle timeout 为10 秒,最大连接数为8192。
我们当前的 sysctl.conf 内容是:
net.ipv4.tcp_fin_timeout = 1 …Run Code Online (Sandbox Code Playgroud) debian file-sharing performance-tuning lighttpd debian-lenny
我正在尝试减少我的 linux 网络应用程序的延迟。我了解到有两种工具可以将程序“绑定”到特定的 CPU 内核:taskset 和 cpuset。
central-processing-unit latency multi-core performance-tuning
用户需要 SHOWPLAN 权限才能使用执行计划来调整查询。
此权限的含义是什么。授予用户权限是否安全?我在这里看到了安全说明,这与我无关。
还有其他需要注意的问题吗?从我看来,即使在生产数据库上,授予用户此权限似乎也不是问题。
谢谢您的帮助!
在几乎每个 FreeBSD 网络调优文档中,我都能找到:
# /boot/loader.conf
net.inet.tcp.tcbhashsize=4096
Run Code Online (Sandbox Code Playgroud)
这通常与一些无用的语句配对,例如“TCP 控制块哈希表调整”或“将此设置为合理的值”。man 4 tcp也没有多大帮助:
Run Code Online (Sandbox Code Playgroud)tcbhashsize Size of the TCP control-block hash table (read-only). This may be tuned using the kernel option TCBHASHSIZE or by setting net.inet.tcp.tcbhashsize in the loader(8).
我能找到的唯一涉及这个神秘事物的文档是优化 FreeBSD IP 和 TCP 堆栈中传输层下的协议控制块查找小节,但它的描述更多地是关于使用它的潜在瓶颈。这似乎与将新的 TCP 段与它们的侦听套接字匹配有关,但我不确定如何。
TCP 控制块究竟是做什么用的?为什么要将其哈希大小设置为 4096 或任何其他特定数字?
偶尔,在我的 Apache 错误日志中,我会发现:
[error] server reached MaxClients setting, consider raising the MaxClients setting
Run Code Online (Sandbox Code Playgroud)
由于内存不足的问题,我过去故意将 MaxClients 降低到 60,但我想确切地知道当服务器上达到此限制时用户端发生了什么。他们访问的页面加载时间是否更长?他们是否收到某种错误消息?
performance ×3
apache-2.2 ×2
debian ×1
debian-lenny ×1
ext4 ×1
file-sharing ×1
freebsd ×1
high-load ×1
interrupts ×1
latency ×1
lighttpd ×1
linux ×1
multi-core ×1
ntfs ×1
postgresql ×1
security ×1
sql-server ×1
svn ×1
sysctl ×1
ubuntu ×1
ubuntu-16.04 ×1