Linux

移除沒再使用的 snap 套件

什麼是 snap

參考 wikipedia 的 snap 說明官方網站說明。

snap 的優略就很多,可以自行 Google:// 如,Linux Mint決定不支援Ubuntu Snap

snap 不會自己移除舊版

Ubuntu 用久了之後會有一堆舊版的 snap 套件,如下圖:

當然可以工人智慧手動一個一個移除,但如果 snap 安裝很多的時候勒?!

sudo snap remove google-cloud-sdk --revision 187

使用 shell script 一次移除舊版 snap

shell script 如下:

#!/bin/bash                                                                                                                     
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do sudo snap remove "$snapname" --revision="$revision"
done

第一段會顯示多少 snap 要移除

snap list --all | awk '/disabled/{print $1, $3}'
google-cloud-sdk 187
core18 2066

將 shell script 存檔

vim snap_remove_eol.sh && chmod +x snap_remove_eol.sh

snap purge 用法

sudo ./snap_remove_eol.sh

Ubuntu Linux 關閉 IPv6

現在預設裝好之後,都會啟用 IPv6,立意很好,但是某些服務會一直產生 error message

修改方式

編輯 /etc/sysctl.conf

vim /etc/sysctl.conf

新增下列

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

關閉 GRUB 的 IPv6 載入

Perform the following steps with root privileges to disable IPv6 in Ubuntu 18.04/16.04 Permanently using grub method.

編輯 /etc/default/grub

sudo vim /etc/default/grub

編輯下列兩行為:

GRUB_CMDLINE_LINUX="ipv6.disable=1"
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

更新 grub 設定

update-grub

重新開機


Linux 下使用 dd 清理 MBR

您可以使用 dd 命令刪除 MBR。一個 MBR 是512位元的磁碟引導區,它是硬碟分區數據存儲設備的第一個 sector。

MBR 容量說明

容量:446 + 64 + 2 = 512 bytes

446 bytes – Bootstrap.
64 bytes – Partition table.
2 bytes – Signature.

直接清理所有 MBR 及所屬於的 partition

dd if=/dev/zero of=/dev/sdX bs=512 count=1

只清理 MBR 資料

dd if=/dev/zero of=/dev/sdc bs=446 count=1

查看記憶體時脈及世代 Linux or Ubuntu

方法一:

sudo dmidecode -t memory

輸出結果:

# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x0039, DMI type 16, 23 bytes
Physical Memory Array
	Location: System Board Or Motherboard
	Use: System Memory
	Error Correction Type: None
	Maximum Capacity: 64 GB
	Error Information Handle: Not Provided
	Number Of Devices: 4

Handle 0x0047, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelA-DIMM0
	Bank Locator: BANK 0
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 6EF60200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x0048, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelA-DIMM1
	Bank Locator: BANK 1
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 2CF20200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x0049, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelB-DIMM0
	Bank Locator: BANK 2
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 04F40200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x004A, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelB-DIMM1
	Bank Locator: BANK 3
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: DBEF0200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

方法二:

sudo lshw -short -C memory

輸出結果:

H/W path               Device          Class          Description
=================================================================
/0/0                                   memory         64KiB BIOS
/0/39                                  memory         32GiB System Memory
/0/39/0                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/1                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/2                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/3                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/43                                  memory         384KiB L1 cache
/0/44                                  memory         1536KiB L2 cache
/0/45                                  memory         9MiB L3 cache
/0/100/14.2                            memory         RAM memory


PHP 優化 – 啟用 HugePage (php7.4-fpm & php8.0-fpm)

啟用 Linux 系統的 HugePage(大型暫存分頁機制)可讓 PHP 的 Text 段落和記憶體中的分頁都改用 HugePage 來儲存,來減少 TLB(Translation Lookaside Buffer)遺失而提高效能。原本系統記憶體多以 4KB 來分頁,但啟用 HugePage 後則改以 2MB 來分頁。CPU 存取記憶體時,得查表才能得知虛擬定址和記憶體定址間的轉換,CPU 會透過 TLB 暫存來加速查表。若分頁單位越小,分頁筆數就越多,查表時就會得建立越多 TLB ,容易造成暫存資料的遺失而得重查,啟用了大型 HugePage 分頁設定就能減少 TLB 數量而降低遺失的問題。

若以小小站規模,透過sudo sysctl vm.nr_hugepages= 256 指令,來分配 256 個預留的大型暫存分頁(共 512MB)),然後在php.ini設定檔中加入 opcache.huge_code_pages=1的敘述就能啟用。

啟用 hugepages

sudo sysctl -w vm.nr_hugepages=256 && echo 'vm.nr_hugepages=256' | sudo tee -a /etc/sysctl.conf > /dev/null

編輯 php.ini 啟用功能

opcache.file_cache="/dev/shm"
opcache.huge_code_pages=1

觀察 hugepages 動態

ubuntu@host:~$ grep Huge /proc/meminfo
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     256
HugePages_Free:      231
HugePages_Rsvd:       25
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          524288 kB

php 使用的記憶體

ubuntu@host:~# size /usr/bin/php7.4
   text    data     bss     dec     hex filename
4061631  573374  119376 4754381  488bcd /usr/bin/php7.4

Oracle VM VirtualBox 各種技巧筆記

先前的筆記

新增整理各式用到的 Oracle VM VirtualBox 技巧筆記

最近因為很多需要實驗的環境,所以用 VirtualBox 開了一堆 VM,避免年紀大了記性差,再把筆記整理一下。

啟用 SSE4.1 跟 SSE4.2 – Passing Through SSE4.1/SSE4.2 Instructions

VBoxManage setextradata VM-Name VBoxInternal/CPUM/IsaExts/SSE4.1 1
VBoxManage setextradata VM-Name VBoxInternal/CPUM/IsaExts/SSE4.2 1

壓縮磁碟沒用的空間

在 Guest 先要做的(.vdi 檔案移到傳統硬碟,修改設定好之後再跑以下)

  • 清理硬碟工具
  • 再跑 Defrag
  • 跑 Defrag 之後再用 SDelete 把沒用的磁區歸零,指令如下。
Sdelete64.exe -z c:

壓縮 .vdi 檔

VBoxManage modifymedium disk VM-Name.vdi --compact

創建掛載實體硬碟或是分割區

一切都是為了效能跟便利性XD

建立實體硬碟的虛擬檔案

創建好之後,再掛載到虛擬機器上去,以下以 Linux 為案例。

VBoxManage internalcommands createrawvmdk -filename '/VMs/physical-disk.vmdk' -rawdisk /dev/sdx


設定及清除 /var/log/journal

每次看到肥肥的 /var/log/journal 資料夾就會很啊雜,沒事佔用了幾百 MB 的空間

清理 journal 檔

journalctl --vacuum-time 2d
journalctl --vacuum-size 10M

設定 journal 檔的大小

sudo vim /etc/systemd/journald.conf,更改這兩行

SystemMaxUse=10M
SystemMaxFileSize=10M

重新啟動 systemd-journald

sudo systemctl restart systemd-journald.service

http cache control

Apache2

sudo a2enmod expires
sudo a2enmod headers

 

.htaccess

<filesMatch ".(ico|pdf|flv|jpg|svg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>

 


硬碟、固態硬碟相關指令

共通選項

  • 用 gdisk 指定成 gpt
  • 保留空間 0%
  • 格式化的時候(開機碟或 BBS 及其他用途除外),因為檔案都很大,用不到那麼多 inode
sudo mkfs.ext4 -m 0 -T largefile4 -L $Lable -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdc1

如果當初 mkfs 的時候忘記 -m 0 的話

sudo tune2fs -m 0 /dev/sdx1

SSD 的設定

/etc/default/grub 裡頭,GRUB_CMDLINE_LINUX_DEFAULT= 這行加入下面這段。

elevator=deadline
echo 0 > /proc/sys/vm/swappiness


查詢 PCIe 裝置速度

lspci | grep -i 3ware
01:00.0 RAID bus controller: 3ware Inc 9650SE SATA-II RAID PCIe (rev 01)
lspci -n | grep 01:00.0
01:00.0 0104: 13c1:1004 (rev 01)
sudo lspci -n -d 13c1:1004 -vvv | grep -i width
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s L1, Exit Latency L0s &lt;512ns, L1 &lt;64us
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk- DLActive+ BWMgmt- ABWMgmt-

 


回到頂端