标签 优化 下的文章

推动苹果公司成为万亿公司的一封邮件

2007 年,苹果的市值约为 1500 亿美元。今天,它已经超过了 2 万亿美元,主要是基于 iPhone 的成功,而 iPhone 的成功,至少部分是基于 App Store 的成功。而这一切,都始于乔布斯的一封邮件。

最初,iPhone 在每台设备上只预装了 16 个应用。乔布斯告诉开发者,如果他们想为 iPhone 创造应用,他们可以制作在 Safari 浏览器中运行的网页应用。用户立即开始想办法越狱,以便在他们的设备上安装应用。所以,苹果只能通过某种官方 SDK 使开发应用程序成为可能。乔布斯给该公司软件工程高级副总裁 Bertrand Serlet 回答到:“当然,只要我们能在 2008 年 1 月 15 日的 Macworld 上把它全部推出来。”2008 年,我们见到了苹果的 SDK 和 App Store。

无论主动还是被动,App Store 这种划时代的创举,真正开创了新的智能手机时代。

Linux 内核将一直保留前 1MB 内存

在一些特定的情况下,前 64kb 的内存会被 BIOS 破坏;在另外一些罕见情况下,前面的内存也会被 BIOS 或 EGA/VGA 帧缓冲区所破坏。因此,与其针对不同情况分别设置内存规避区域,不如将整个前 1MB 内存设置为保留。因此,在 5.13 中将永久保留前 1MB 内存而不使用。

现在真是内存富余了,可以随便将 1MB 内存保留不用了。而就在 20 多年前,那时候还是按 KB 计算着使用内存的。

Torvalds 继续反对在编译 Linux 内核时使用 -O3 优化标志

由于 GCC 的较旧版本可能会在 -O3 编译器优化级别下产生坏的代码,而且有时没有性能上的好处,Linus Torvalds 仍然反对在编译 Linux 内核时使用这种优化标志。Torvalds 总结了他目前对 -O3 的看法:“它在历史上一直有可怕的错误。它已经变好了,但‘变好’并不是一个很高的标准。”WireGuard 项目从开始就一直用 -O3 优化级别构建,也并没有看到因此而产生不良代码的情况,但由于 Torvalds 的指导意见,该项目放弃了这个选项。除了 WireGuard 之外,LZ4 和 Zstd 是仍然在用 -O3 的内核模块。

一方面很多厂商转向使用新版本的编译器非常缓慢,另外一方面一些没有那么严谨的代码也并不适合更高级别的优化。理想化的优化措施,在现实情况中往往不能采用。

Emacs Start Up Profiler》 的作者教你六项减少 Emacs 启动时间的技术。

简而言之:做下面几个步骤:

  1. 使用 Esup 进行性能检测。
  2. 调整垃圾回收的阀值。
  3. 使用 use-package 来自动(延迟)加载所有东西。
  4. 不要使用会引起立即加载的辅助函数。
  5. 参考我的 配置

从 .emacs.d 的失败到现在

我最近宣布了 .emacs.d 的第三次失败,并完成了第四次 Emacs 配置的迭代。演化过程为:

  1. 拷贝并粘贴 elisp 片段到 ~/.emacs 中,希望它能工作。
  2. 借助 el-get 来以更结构化的方式来管理依赖关系。
  3. 放弃自己从零配置,以 Spacemacs 为基础。
  4. 厌倦了 Spacemacs 的复杂性,基于 use-package 重写配置。

本文汇聚了三次重写和创建 《Emacs Start Up Profiler》过程中的技巧。非常感谢 Spacemacs、use-package 等背后的团队。没有这些无私的志愿者,这项任务将会困难得多。

不过守护进程模式又如何呢

在我们开始之前,让我反驳一下优化 Emacs 时的常见观念:“Emacs 旨在作为守护进程来运行的,因此你只需要运行一次而已。”

这个观点很好,只不过:

  • 速度总是越快越好。
  • 配置 Emacs 时,可能会有不得不通过重启 Emacs 的情况。例如,你可能为 post-command-hook 添加了一个运行缓慢的 lambda 函数,很难删掉它。
  • 重启 Emacs 能帮你验证不同会话之间是否还能保留配置。

1、估算当前以及最佳的启动时间

第一步是测量当前的启动时间。最简单的方法就是在启动时显示后续步骤进度的信息。

;; Use a hook so the message doesn't get clobbered by other messages.
(add-hook 'emacs-startup-hook
    (lambda ()
        (message "Emacs ready in %s with %d garbage collections."
            (format "%.2f seconds"
                (float-time
                    (time-subtract after-init-time before-init-time)))
        gcs-done)))

第二步、测量最佳的启动速度,以便了解可能的情况。我的是 0.3 秒。

# -q ignores personal Emacs files but loads the site files.
emacs -q --eval='(message "%s" (emacs-init-time))' 

;; For macOS users:
open -n /Applications/Emacs.app --args -q --eval='(message "%s" (emacs-init-time))'  

2、检测 Emacs 启动指标对你大有帮助

Emacs StartUp Profiler》(ESUP)将会给你顶层语句执行的详细指标。

esup.png

图 1: Emacs Start Up Profiler 截图

警告:Spacemacs 用户需要注意,ESUP 目前与 Spacemacs 的 init.el 文件有冲突。遵照 https://github.com/jschaf/esup/issues/48 上说的进行升级。

3、调高启动时垃圾回收的阀值

这为我节省了 0.3 秒

Emacs 默认值是 760kB,这在现代机器看来极其保守。真正的诀窍在于初始化完成后再把它降到合理的水平。这为我节省了 0.3 秒。

;; Make startup faster by reducing the frequency of garbage
;; collection.  The default is 800 kilobytes.  Measured in bytes.
(setq gc-cons-threshold (* 50 1000 1000))

;; The rest of the init file.

;; Make gc pauses faster by decreasing the threshold.
(setq gc-cons-threshold (* 2 1000 1000))

~/.emacs.d/init.el

4、不要 require 任何东西,而是使用 use-package 来自动加载

让 Emacs 变坏的最好方法就是减少要做的事情。require 会立即加载源文件,但是很少会出现需要在启动阶段就立即需要这些功能的。

use-package 中你只需要声明好需要哪个包中的哪个功能,use-package 就会帮你完成正确的事情。它看起来是这样的:

(use-package evil-lisp-state ; the Melpa package name

  :defer t ; autoload this package

  :init ; Code to run immediately.
  (setq evil-lisp-state-global nil)

  :config ; Code to run after the package is loaded.
  (abn/define-leader-keys "k" evil-lisp-state-map))

可以通过查看 features 变量来查看 Emacs 现在加载了那些包。想要更好看的输出可以使用 lpkg explorer 或者我在 abn-funcs-benchmark.el 中的变体。输出看起来类似这样的:

479 features currently loaded
  - abn-funcs-benchmark: /Users/jschaf/.dotfiles/emacs/funcs/abn-funcs-benchmark.el
  - evil-surround: /Users/jschaf/.emacs.d/elpa/evil-surround-20170910.1952/evil-surround.elc
  - misearch: /Applications/Emacs.app/Contents/Resources/lisp/misearch.elc
  - multi-isearch: nil
  - <many more>

5、不要使用辅助函数来设置模式

通常,Emacs 包会建议通过运行一个辅助函数来设置键绑定。下面是一些例子:

  • (evil-escape-mode)
  • (windmove-default-keybindings) ; 设置快捷键。
  • (yas-global-mode 1) ; 复杂的片段配置。

可以通过 use-package 来对此进行重构以提高启动速度。这些辅助函数只会让你立即加载那些尚用不到的包。

下面这个例子告诉你如何自动加载 evil-escape-mode

;; The definition of evil-escape-mode.
(define-minor-mode evil-escape-mode
  (if evil-escape-mode
      (add-hook 'pre-command-hook 'evil-escape-pre-command-hook)
    (remove-hook 'pre-command-hook 'evil-escape-pre-command-hook)))

;; Before:
(evil-escape-mode)

;; After:
(use-package evil-escape
  :defer t
  ;; Only needed for functions without an autoload comment (;;;###autoload).
  :commands (evil-escape-pre-command-hook) 

  ;; Adding to a hook won't load the function until we invoke it.
  ;; With pre-command-hook, that means the first command we run will
  ;; load evil-escape.
  :init (add-hook 'pre-command-hook 'evil-escape-pre-command-hook))

下面来看一个关于 org-babel 的例子,这个例子更为复杂。我们通常的配置时这样的:

(org-babel-do-load-languages
 'org-babel-load-languages
 '((shell . t)
   (emacs-lisp . nil)))

这不是个好的配置,因为 org-babel-do-load-languages 定义在 org.el 中,而该文件有超过 2 万 4 千行的代码,需要花 0.2 秒来加载。通过查看源代码可以看到 org-babel-do-load-languages 仅仅只是加载 ob-<lang> 包而已,像这样:

;; From org.el in the org-babel-do-load-languages function.
(require (intern (concat "ob-" lang)))

而在 ob-<lang>.el 文件中,我们只关心其中的两个方法 org-babel-execute:<lang>org-babel-expand-body:<lang>。我们可以延时加载 org-babel 相关功能而无需调用 org-babel-do-load-languages,像这样:

;; Avoid `org-babel-do-load-languages' since it does an eager require.
(use-package ob-python
  :defer t
  :ensure org-plus-contrib
  :commands (org-babel-execute:python))

(use-package ob-shell
  :defer t
  :ensure org-plus-contrib
  :commands
  (org-babel-execute:sh
   org-babel-expand-body:sh

   org-babel-execute:bash
   org-babel-expand-body:bash))

6、使用惰性定时器来推迟加载非立即需要的包

我推迟加载了 9 个包,这帮我节省了 0.4 秒

有些包特别有用,你希望可以很快就能使用它们,但是它们本身在 Emacs 启动过程中又不是必须的。这些软件包包括:

  • recentf:保存最近的编辑过的那些文件。
  • saveplace:保存访问过文件的光标位置。
  • server:开启 Emacs 守护进程。
  • autorevert:自动重载被修改过的文件。
  • paren:高亮匹配的括号。
  • projectile:项目管理工具。
  • whitespace:高亮行尾的空格。

不要 require 这些软件包,而是等到空闲 N 秒后再加载它们。我在 1 秒后加载那些比较重要的包,在 2 秒后加载其他所有的包。

(use-package recentf
  ;; Loads after 1 second of idle time.
  :defer 1)

(use-package uniquify
  ;; Less important than recentf.
  :defer 2)

不值得的优化

不要费力把你的 Emacs 配置文件编译成字节码了。这只节省了大约 0.05 秒。把配置文件编译成字节码还可能导致源文件与编译后的文件不一致从而难以重现错误进行调试。


via: https://blog.d46.us/advanced-emacs-startup/

作者:Joe Schafer 选题:lujun9972 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

一些实际的加速 Ubuntu Linux 的技巧。 这里的技巧对于大多数版本的 Ubuntu 是有效的,也可以应用于 Linux Mint 以及其他的基于 Ubuntu 的发行版。

也许你经历过使用 Ubuntu 一段时间后系统开始运行缓慢的情况。 在这篇文章里,我们将看到几项调整以及使 Ubuntu 运行更快的窍门

在我们了解如何提升 Ubuntu 的总体系统表现之前,首先让我们思考为什么系统逐渐变慢。这个问题可能有很多原因。也许你有一台只有基础配置的简陋的电脑;也许你安装了一些在启动时即耗尽资源的应用。事实上原因无穷无尽。

这里我列出一些能够帮助你稍微加速 Ubuntu 的小调整。也有一些你能够采用以获取一个更流畅、有所提升的系统表现的经验。你可以选择遵循全部或部分的建议。将各项调整一点一点的结合就能给你一个更流畅、更迅捷快速的 Ubuntu。

使 Ubuntu 更快的技巧

Tips to speed up Ubuntu

我在一个较老版本的 Ubuntu 上使用了这些调整,但是我相信其他的 Ubuntu 版本以及其他的例如 Linux Mint、 Elementary OS Luna 等基 Ubuntu 的 Linux 版本也是同样适用的。

1、 减少默认的 grub 载入时间

Grub 给你 10 秒的时间以让你在多系统启动项或恢复模式之间改变。对我而言,它是多余的。它也意味着你将不得不坐在电脑旁,敲下回车键以尽可能快的启动进入 Ubuntu。这花了一点时间,不是吗? 第一个技巧便是改变这个启动时间。如果你使用图形工具更舒适,阅读这篇文章来使用 Grub 定制器改变 grub 时间以及启动顺序

如果更倾向于命令行,你可以简单地使用以下的命令来打开 grub 配置:

sudo gedit /etc/default/grub &

并且将 GRUB_TIMEOUT=10 改为 GRUB_TIMEOUT=2。这将改变启动时间为 2 秒。最好不要将这里改为 0,因为这样你将会失去在操作系统及恢复选项之间切换的机会。一旦你更改了 grub 配置,使用以下命令来使更改生效:

sudo update-grub

2、 管理开机启动的应用

渐渐地你开始安装各种应用。 如果你是我们的老读者, 你也许从 App of the week 系列安装了许多应用。

这些应用中的一些在每次开机时都会启动,当然资源运行这些应用也会陷入繁忙。结果:一台电脑因为每次启动时的持续时间而变得缓慢。进入 Unity Dash 寻找 “Startup Applications”:

在这里,看看哪些应用在开机时被载入。现在考虑在你每次启动 Ubuntu 时是否有不需要启动的应用。尽管移除它们:

但是要是你不想从启动里移除它们怎么办?举个例子,如果你安装了 Ubuntu 最好的指示器程序之一, 你将想要它们在每次开机时自动地启动。

这里你所能做的就是延迟一些程序的启动时间。这样你将能够释放开机启动时的资源,并且一段时间后你的应用将被自动启动。在上一张图片里点击 Edit 并使用 sleep 选项来更改运行命令。

例如,如果你想要延迟 Dropbox 指示器的运行,我们指定时间 20 秒,你只需要在已有的命令里像这样加入一个命令

sleep 20;

所以,命令 dropbox start -i 变为 sleep 20; drobox start -i 。这意味着现在 Dropbox 将延迟 20 秒启动。你可以通过相似的方法来改变另一个开机启动应用的启动时间。

3、 安装 preload 来加速应用载入时间:

Preload 是一个后台运行的守护进程,它分析用户行为和频繁运行的应用。打开终端,使用如下的命令来安装 preload:

sudo apt-get install preload

安装后,重启你的电脑就不用管它了。它将在后台工作。阅读更多关于preload

4、 选择最好的软件更新镜像

验证你更新软件是否正在使用最好的镜像是很好的做法。Ubuntu 的软件仓库镜像跨过全球,使用离你最近的一个是相当明智的。随着从服务器获取包的时间减少,这将形成更快的系统更新。

在 “Software & Updates->Ubuntu Software tab->Download From” 里选择 “Other” 紧接着点击 “Select Best Server”:

它将运行测试来告知你那个是最好的镜像。正常地,最好的镜像已经被设置,但是我说过,验证它没什么坏处。并且,如果仓库缓存的最近的镜像没有频繁更新的话,这将引起获取更新时的一些延迟。这对于网速相对慢的人们是有用的。你可以使用这些技巧来加速 Ubuntu 的 wifi

5、 为了更快的更新,使用 apt-fast 而不是 apt-get

apt-fastapt-get 的一个 shell 脚本包装器,通过从多连接同时下载包来提升更新及包下载速度。 如果你经常使用终端以及 apt-get 来安装和更新包,你也许会想要试一试 apt-fast。使用下面的命令来通过官方 PPA 安装 apt-fast

sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get install apt-fast

6、 从 apt-get 更新移除语言相关的 ign

你曾经注意过 sudo apt-get 更新的输出吗?其中有三种行,hitignget。 你可以在这里阅读它们的意义。如果你看到 IGN 行,你会发现它们中的大多数都与语言翻译有关。如果你使用所有的英文应用及包,你将完全不需要英文向英文的包数据库的翻译。

如果你从 apt-get 制止语言相关的更新,它将略微地增加 apt-get 的更新速度。为了那样,打开如下的文件:

sudo gedit /etc/apt/apt.conf.d/00aptitude

然后在文件末尾添加如下行:

Acquire::Languages "none";

speed up apt get update in Ubuntu

7、 减少过热

现在过热是电脑普遍的问题。一台过热的电脑运行相当缓慢。当你的 CPU 风扇转得像 尤塞恩·博尔特 一样快,打开一个程序将花费很长的时间。有两个工具你可以用来减少过热,使 Ubuntu 获得更好的系统表现,即 TLP 和 CPUFREQ。

在终端里使用以下命令来安装 TLP:

sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw
sudo tlp start

安装完 TLP 后你不需要做任何事。它在后台工作。

使用如下命令来安装 CPUFREQ 指示器:

sudo apt-get install indicator-cpufreq

重启你的电脑并使用 Powersave 模式:

8、 调整 LibreOffice 来使它更快

如果你是频繁使用 office 产品的用户,那么你会想要稍微调整默认的 LibreOffice 使它更快。这里你将调整内存选项。打开 Open LibreOffice,进入 “Tools->Options”。在那里,从左边的侧栏选择“Memory”并启用 “Systray Quickstarter” 以及增加内存分配。

你可以阅读更多关于如何提速 LibreOffice 的细节。

9、 使用轻量级的桌面环境 (如果你可以)

如果你选择安装默认的 Unity of GNOME 桌面环境, 你也许会选择一个轻量级的桌面环境像 XfceLXDE

这些桌面环境使用更少的内存,消耗更少的 CPU。它们也自带轻量应用集来更深入地帮助更快地使用 Ubuntu。你可以参考这篇详细指南来学习如何在 Ubuntu 上安装 Xfce

当然,桌面也许没有 Unity 或 GNOME 看起来现代化。那是你必须做出的妥协。

10、 使用不同应用的更轻量可选

这不仅仅是建议和喜好。一些默认的或者流行的应用是耗资源的且可能不适合低端的电脑。你能做的就是使用这些应用的一些替代品。例如,使用 AppGrid 而不是 Ubuntu 软件中心。使用 Gdebi 来安装包。使用 AbiWord 而不是 LibreOffice Writer 等。

可以断定这些技巧的汇总使 Ubuntu 14.04,16.04 以及其他版本更快。我确定这些技巧会提供一个总体上更好的系统表现。

对于加速 Ubuntu 你也有妙计吗?这些技巧也帮到你了吗?分享你的观点。 问题,建议总是受欢迎的。请在评论区里提出来。


via: https://itsfoss.com/speed-up-ubuntu-1310/

作者:Abhishek Prakash 选题:lujun9972 译者:darsh8 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Google 最有趣的部分之一就是我们规模庞大的持续分析服务。我们可以看到谁在使用 CPU 和内存,我们可以持续地监控我们的生产服务以争用和阻止配置文件,并且我们可以生成分析和报告,并轻松地告诉我们可以进行哪些有重要影响的优化。

我简单研究了 Stackdriver Profiler,这是我们的新产品,它填补了针对云端用户在云服务范围内分析服务的空白。请注意,你无需在 Google 云平台上运行你的代码即可使用它。实际上,我现在每天都在开发时使用它。它也支持 Java 和 Node.js。

在生产中分析

pprof 可安全地用于生产。我们针对 CPU 和堆分配分析的额外会增加 5% 的开销。一个实例中每分钟收集 10 秒。如果你有一个 Kubernetes Pod 的多个副本,我们确保进行分摊收集。例如,如果你拥有一个 pod 的 10 个副本,模式,那么开销将变为 0.5%。这使用户可以一直进行分析。

我们目前支持 Go 程序的 CPU、堆、互斥和线程分析。

为什么?

在解释如何在生产中使用分析器之前,先解释为什么你想要在生产中进行分析将有所帮助。一些非常常见的情况是:

  • 调试仅在生产中可见的性能问题。
  • 了解 CPU 使用率以减少费用。
  • 了解争用的累积和优化的地方。
  • 了解新版本的影响,例如看到 canary 和产品级之间的区别。
  • 通过关联分析样本以了解延迟的根本原因来丰富你的分布式经验。

启用

Stackdriver Profiler 不能与 net/http/pprof 处理程序一起使用,并要求你在程序中安装和配置一个一行的代理。

go get cloud.google.com/go/profiler

在你的主函数中,启动分析器:

if err := profiler.Start(profiler.Config{
   Service:        "indexing-service",
   ServiceVersion: "1.0",
   ProjectID:      "bamboo-project-606", // optional on GCP
}); err != nil {
   log.Fatalf("Cannot start the profiler: %v", err) 
}

当你运行你的程序后,profiler 包将每分钟报告给分析器 10 秒钟。

可视化

当分析被报告给后端后,你将在 https://console.cloud.google.com/profiler 上看到火焰图。你可以按标签过滤并更改时间范围,也可以按服务名称和版本进行细分。数据将会长达 30 天。

你可以选择其中一个分析,按服务,区域和版本分解。你可以在火焰中移动并通过标签进行过滤。

阅读火焰图

Brendan Gregg 非常全面地解释了火焰图可视化。Stackdriver Profiler 增加了一点它自己的特点。

我们将查看一个 CPU 分析,但这也适用于其他分析。

  1. 最上面的 x 轴表示整个程序。火焰上的每个框表示调用路径上的一帧。框的宽度与执行该函数花费的 CPU 时间成正比。
  2. 框从左到右排序,左边是花费最多的调用路径。
  3. 来自同一包的帧具有相同的颜色。这里所有运行时功能均以绿色表示。
  4. 你可以单击任何框进一步展开执行树。

你可以将鼠标悬停在任何框上查看任何帧的详细信息。

过滤

你可以显示、隐藏和高亮符号名称。如果你特别想了解某个特定调用或包的消耗,这些信息非常有用。

  1. 选择你的过滤器。你可以组合多个过滤器。在这里,我们将高亮显示 runtime.memmove
  2. 火焰将使用过滤器过滤帧并可视化过滤后的框。在这种情况下,它高亮显示所有 runtime.memmove 框。

via: https://medium.com/google-cloud/continuous-profiling-of-go-programs-96d4416af77b

作者:JBD 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你不改变 MySQL 的缺省配置,你的服务器的性能就像题图的坏在一档的法拉利一样 “虎落平阳被犬欺” …

我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置,你可以压榨出高达 80% 的性能提升。尤其是在服务器资源越来越便宜的当下。

警告

  1. 没有两个数据库或者应用程序是完全相同的。这里假设我们要调整的数据库是为一个“典型”的 Web 网站服务的,优先考虑的是快速查询、良好的用户体验以及处理大量的流量。
  2. 在你对服务器进行优化之前,请做好数据库备份!

1、 使用 InnoDB 存储引擎

如果你还在使用 MyISAM 存储引擎,那么是时候转换到 InnoDB 了。有很多的理由都表明 InnoDB 比 MyISAM 更有优势,如果你关注性能,那么,我们来看一下它们是如何利用物理内存的:

  • MyISAM:仅在内存中保存索引。
  • InnoDB:在内存中保存索引数据。

结论:保存在内存的内容访问速度要比磁盘上的更快。

下面是如何在你的表上去转换存储引擎的命令:

ALTER TABLE table_name ENGINE=InnoDB;

注意:你已经创建了所有合适的索引,对吗?为了更好的性能,创建索引永远是第一优先考虑的事情。

2、 让 InnoDB 使用所有的内存

你可以在 my.cnf 文件中编辑你的 MySQL 配置。使用 innodb_buffer_pool_size 参数去配置在你的服务器上允许 InnoDB 使用物理内存数量。

对此(假设你的服务器仅仅运行 MySQL),公认的“经验法则”是设置为你的服务器物理内存的 80%。在保证操作系统不使用交换分区而正常运行所需要的足够内存之后 ,尽可能多地为 MySQL 分配物理内存。

因此,如果你的服务器物理内存是 32 GB,可以将那个参数设置为多达 25 GB。

innodb_buffer_pool_size = 25600M

*注意:(1)如果你的服务器内存较小并且小于 1 GB。为了适用本文的方法,你应该去升级你的服务器。 (2) 如果你的服务器内存特别大,比如,它有 200 GB,那么,根据一般常识,你也没有必要为操作系统保留多达 40 GB 的内存。 *

3、 让 InnoDB 多任务运行

如果服务器上的参数 innodb_buffer_pool_size 的配置是大于 1 GB,将根据参数 innodb_buffer_pool_instances 的设置, 将 InnoDB 的缓冲池划分为多个。

拥有多于一个的缓冲池的好处有:

在多线程同时访问缓冲池时可能会遇到瓶颈。你可以通过启用多缓冲池来最小化这种争用情况:

对于缓冲池数量的官方建议是:

为了实现最佳的效果,要综合考虑 innodb_buffer_pool_instancesinnodb_buffer_pool_size 的设置,以确保每个实例至少有不小于 1 GB 的缓冲池。

因此,在我们的示例中,将参数 innodb_buffer_pool_size 设置为 25 GB 的拥有 32 GB 物理内存的服务器上。一个合适的设置为 25600M / 24 = 1.06 GB

innodb_buffer_pool_instances = 24

注意!

在修改了 my.cnf 文件后需要重启 MySQL 才能生效:

sudo service mysql restart

还有更多更科学的方法来优化这些参数,但是这几点可以作为一个通用准则来应用,将使你的 MySQL 服务器性能更好。


作者简介:

我喜欢商业技术以及跑车 | 集团 CTO @ Parcel Monkey, Cloud Fulfilment & Kong。


via: https://medium.com/@richb_/tuning-mysql-3-simple-tweaks-6356768f9b90

作者:Rich Barrett 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你的 Ubuntu 系统可以运行得如此顺畅,以至于你会奇怪为什么没有早一些从那些桌面加载很慢的操作系统(比如 Windows)转过来。Ubuntu 在大多数现代化的机器上都能够很顺畅的运行,一些更老的机器使用 Ubuntu 系统的一些变种版本,比如 Lubuntu、Xubuntu 和 Ubuntu MATE,同样给人留下了深刻印象。极少的情况下,你对 Ubuntu 桌面的使用体验会越来越糟。如果非常不走运,你的 Ubuntu 系统并没有像你所希望的那样运行顺畅,那么你可以做一些事情来提高系统性能和响应速度。

不过首先我们来看一看为什么电脑会运行得很慢?下面是我列举的一些原因:

  1. 电脑陈旧
  2. 安装了太多的应用
  3. 系统里的一些东西坏了
  4. 还有更多的原因...

现在让我们来看一些改善这个问题的技巧。

1、 交换值 Swappiness

如果你的系统有一个交换分区,那么这个技巧对你是最适合的(注:交换分区不建议为固态驱动器,因为这样会缩短驱动器的使用寿命)。交换分区可以帮助系统,特别是内存容量较低的系统,来管理系统内存。将数据写入交换分区(硬盘)比写入内存要慢一些,所以你可以通过减少 swappiness 值来限制数据写入交换分区的频率。默认情况下, Ubuntu 的 swappiness 值是 60%, 所以你可以通过下面的命令将它减至 10%:

sudo bash -c "echo 'vm.swappiness = 10' >> /etc/sysctl.conf"

2、 停止索引

索引的目的是加快搜索结果,但另一方面,索引会导致较老配置的系统出现一些问题。为了停止索引,输入下面的命令来移除索引工具:

sudo apt-get purge apt-xapian-index

3、 管理 启动应用 startup applications

启动应用会对系统性能造成很大的影响。当你安装一些应用以后,这些应用会添加启动项,从而当你启动系统的时候它们也跟着启动,但你可以移除这些应用以提高系统性能。通过在 Unity 窗口搜索打开 “启动应用”。绝大多数自启动选项都会被隐藏,所以在终端输入下面的命令使它们可见然后你就可以停止某些 “启动应用”了:

sudo sed -i "s/NoDisplay=true/NoDisplay=false/g" /etc/xdg/autostart/\*.desktop

4、 尝试预载入

预载入(preload) 是一个守护进程/后台服务,它可以监控系统上使用的应用程序,它会将所需要的二进制库在其需要加载到内存前就预先载入,以便应用程序启动得更快。在终端输入下面的命令安装预载入:

sudo apt-get install preload

5、 选择更加轻量型的应用

你在 Ubuntu 桌面上使用什么应用程序呢?有更轻量的替代品吗?如果有,就替换成它们——如果它们也能满足你的需求的话。 LibreOffice 能够给你最好的办公体验,但是它的替代品,比如 Abiword 能够很大程度的改善系统性能。

6、 切换到一个更加轻量型的桌面环境

你在 Ubuntu 系统上使用的桌面环境是 Unity 或 KDE 吗?这些桌面环境对系统的要求很高。相反,你可以在当前桌面环境之外同时安装一个 LxQt 或者 XFCE 环境,然后切换到它们。或者,你也可以换到 Ubuntu 的不同变种版本,比如 Lubuntu 或 Xubuntu ,从而享受更快的体验。

7、 清理系统垃圾

尽管 Ubuntu 系统不会变得像 Windows 系统那么慢,但它还是会变慢。清除系统里不需要的文件可以改善系统性能。尝试使用 Ubuntu Tweak 工具中的 Janitor 工具来清理系统。还有一个 Bleachbit 工具也可用来清理系统。

同时请阅读 - Bleachbit - CCleaner 的一个替代品

8、 尝试重新安装

有时,一些东西可能坏了,清理垃圾或者使用上面提到的大多数技巧都没用。这时,你唯一的选择就是备份文件,然后尝试重新安装。

9、 升级硬件

我列表上的最后一个技巧是升级硬件。在绝大多数情况下,这是可以的。如果可以这样做,那将极大的提高系统性能。你可以增加已安装的内存, 从传统磁盘切换到固态驱动器或者升级你的处理器,特别是如果你在台式电脑上运行 Ubuntu 系统,这将极大提高系统性能。

结论

我希望这些技巧能够陪伴你走很长的一段路,让你的 Ubuntu 桌面以一个令人印象深刻的速度运行。注意,你不需要尝试所有的技巧,只需要找到一个适合你的情况的技巧,然后观察系统响应如何变化。你还知道其他提高 Ubuntu 系统性能的技巧吗?请在评论里分享给我们。


via: http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed

作者:linuxandubuntu.com 译者:ucasFL 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出