Linux 性能監控之命令行工具

来源:http://www.cnblogs.com/dongdongwq/archive/2016/06/03/5555770.html
-Advertisement-
Play Games

1. lsof - 列出打開的文件 在許多Linux或者類Unix系統里都有lsof命令,它常用於以列表的形式顯示所有打開的文件和進程。打開的文件包括磁碟文件、網路套接字、管道、設備和進程。使用這條命令的主要情形之一就是在無法掛載磁碟和顯示正在使用或者打開某個文件的錯誤信息的時候。 常用的參數列表: ...


引言
對於系統和網路管理員來說每天監控和調試Linux系統的性能問題是一項繁重的工作。這些命令行工具可以在各種Linux系統下使用,可以用於監控和查找產生性能問題的原因。這個命令行工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。

1. lsof - 列出打開的文件

       在許多Linux或者類Unix系統里都有lsof命令,它常用於以列表的形式顯示所有打開的文件和進程。打開的文件包括磁碟文件、網路套接字、管道、設備和進程。使用這條命令的主要情形之一就是在無法掛載磁碟和顯示正在使用或者打開某個文件的錯誤信息的時候。

常用的參數列表: lsof filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字元的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,預設是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
查看22埠現在運行的情況
[root@CentOS7 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 925 root 3u IPv4 18374 0t0 TCP *:ssh (LISTEN)
sshd 925 root 4u IPv6 18383 0t0 TCP *:ssh (LISTEN)
sshd 9452 root 3u IPv4 1169003 0t0 TCP CentOS7.2:ssh->192.168.56.1:61347 (ESTABLISHED)
查看所屬root用戶進程所打開的文件類型為txt的文件
[root@CentOS7 ~]# lsof -a -u root -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root txt REG 0,34 1489960 56083 /usr/lib/systemd/systemd
kthreadd 2 root txt unknown /proc/2/exe
ksoftirqd 3 root txt unknown /proc/3/exe
migration 7 root txt unknown /proc/7/exe
rcu_bh 8 root txt unknown /proc/8/exe

2. top - 進程活

       top提供一個當前運行系統實時動態的視圖,也就是正在運行進程。在預設情況下,顯示系統中CPU使用率最高的任務,並每5秒鐘刷新一次。

常用熱鍵

t:顯示摘要信息開關
top - 11:20:12 up 2 days, 18:39, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3/0.7 1[| ]
KiB Mem : 500780 total, 13236 free, 249296 used, 238248 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200108 avail Mem
 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17166 root 20 0 0 0 0 S 0.3 0.0 0:09.05 kworker/0:2
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:02.25 top
23944 root 20 0 1239128 38724 8388 S 0.3 7.7 6:39.63 firefox
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.22 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:11.69 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 6:09.07 rcu_sched
11 root 20 0 0 0 0 S 0.0 0.0 14:11.36 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:03.03 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
m:顯示記憶體信息開關
top - 11:22:12 up 2 days, 18:41, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 60.0/500780 [|||||||||||||||||||||||||||||||||||||||||||||| ]
KiB Swap: 6.4/8388604 [||||| ]
A:分類顯示系統不同資源的使用大戶,有助於快速識別系統中資源消耗多的任務
1:Def - 11:23:40 up 2 days, 18:42, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 500780 total, 21124 free, 249376 used, 230280 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200072 avail Mem
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
920 root 20 0 644044 11096 3360 S 0.3 2.2 10:28.34 daomonit
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:03.00 top
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND
24416 2 0:03.29 0.0 0.0 0 -20 S 0 0 0 kworker/0:2H
24365 1 0:00.04 0.0 0.3 20 0 S 238724 1380 0 gvfsd-metadata
23944 23598 6:40.25 0.0 7.7 20 0 S 1239128 38724 0 firefox
3 PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
23598 10.7 1473588 53752 16 746528 8912 26k 0 0.0 gnome-shell
23944 7.7 1239128 38724 108 582752 8388 46k 0 0.0 firefox
18581 3.2 110512 15824 392 12292 3364 23 0 0.0 dhclient
4 PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
536 1 172 rtkit rtkit ? 0:03.06 0.0 0.1 S rtkit-daemon
1 0 0 root root ? 0:27.20 0.0 0.8 S systemd
2 0 0 root root ? 0:02.22 0.0 0.0 S kthreadd
3 2 0 root root ? 7:11.70 0.0 0.0 S ksoftirqd/0
f:添加刪除所要顯示欄位
Fields Management for window 1:Def, whose current sort field is PPID
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
 
* PID = Process Id GROUP = Group Name TGID = Thread Group Id
* USER = Effective User Name PGRP = Process Group Id ENVIRON = Environment vars* PR = Priority TTY = Controlling Tty vMj = Major Faults delta
* NI = Nice Value TPGID = Tty Process Grp Id vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) SID = Session Id USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nTH = Number of Threads nsIPC=IPC namespace Inode
* SHR = Shared Memory (KiB) P = Last Used Cpu (SMP) nsMNT = MNT namespace Inode
* S = Process Status TIME = CPU Time nsNET = NET namespace Inode
* %MEM = Memory Usage (RES) SWAP = Swapped Size (KiB) nsPID=PID namespace Inode
* TIME+ = CPU Time, hundredths CODE = Code Size (KiB) nsUSER=USER namespace Inode
* COMMAND = Command Name/Line DATA = Data+Stack (KiB) nsUTS= UTS namespace Inode
* %CPU = CPU Usage nMaj = Major Page Faults
PPID = Parent Process pid nMin = Minor Page Faults
UID = Effective User Id nDRT = Dirty Pages Count
RUID = Real User Id WCHAN = Sleeping in Function
RUSER = Real User Name Flags = Task Flags <sched.h>
SUID = Saved User Id CGROUPS = Control Groups
SUSER = Saved User Name SUPGIDS = Supp Groups IDs
GID = Group Id SUPGRPS = Supp Groups Names
r:調整一個正在運行的進程Nice值
PID to renice [default pid = 920]
k:結束一個正在運行的進程
PID to signal/kill [default pid = 19156]
z:彩色/黑白顯示開關

3. vmstat -系統活動、硬體及系統信息

      使用vmstat命令可以得到關於進程、記憶體、記憶體分頁、堵塞IO、traps及CPU活動的信息。 r:表示運行隊列(就是說多少個進程真的分配到CPU),我測試的伺服器目前CPU比較空閑,沒 什麼程式在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。 這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的運行隊列。如果    運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。 b:表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
swpd:虛擬記憶體已使用的大小,如果大於0,表示你的機器物理記憶體不足了,如果不是程式內
存泄露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到
其他機器。free:空閑的物理記憶體的大小,我的機器記憶體總共8G,剩餘3415M。
buff:Linux/Unix系統是用來存儲,目錄裡面有什麼內容,許可權等的緩存,我本機大概占用300
多M
cache:cache直接用來記憶我們打開的文件,給文件做緩衝,我本機大概占用300多M(這裡是Linux/Unix的聰明之處,把空閑的物理記憶體的一部分拿來做文件和目錄的緩存,是為了提高程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用。) si:每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示物理記憶體不夠用或者記憶體泄露了,要查找耗記憶體進程解決掉。我的機器記憶體充裕,一切正常。 so:每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上。
bi:塊設備每秒接收的塊數量,這裡的塊設備是指系統上所有的磁碟和其他塊設備,預設塊大小
是1024byte,我本機上沒什麼IO操作,所以一直是0,但是
我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁碟寫入速度差不多140M每秒。 bo:塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。 in:每秒CPU的中斷次數,包括時間中斷
cs:每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要
進程上下文切換,這個值要越小越好,太大了,要考慮調低
線程或者進程的數目,例如在apache和nginx這種web伺服器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU乾正經事的時間少了,CPU沒有充分利用,是不可取的。 us:用戶CPU時間,我曾經在一個做加密解密很頻繁的伺服器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。 sy:系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
id:空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用
戶CPU使用率,sy是系統CPU使用率。
wt:等待IO CPU時間。
[root@CentOS7 ~]# vmstat -m
Cache Num Total Size Pages
fuse_inode 10 10 768 10
nf_conntrack_ffff88001a2d8000 0 0 320 12
nf_conntrack_ffffffff81a25e00 180 180 320 12
kcopyd_job 0 0 3312 9
dm_uevent 0 0 2608 12
dm_rq_target_io 0 0 136 30
每隔3秒5次:
1 [root@CentOS7 ~]# vmstat 3 5
2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3 r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 539680 17040 8 234828 508 252 7085 420 84 176 6 4 86 4 0
5 0 0 539680 17040 8 234828 0 0 0 0 29 53 0 0 100 0 0
6 1 0 539680 17040 8 234828 0 0 0 0 31 58 0 0 100 0 0
7 0 0 539680 17008 8 234828 0 0 0 0 34 67 0 0 100 0 0
8 1 0 539680 16668 8 234828 0 0 0 0 71 151 1 2 97 0 0 

4. w - 顯示誰已登錄

w命令顯示系統當前用戶及其運行進程的信息。
[root@CentOS7 ~]# w root
12:26:14 up 2 days, 19:45, 3 users, load average: 0.05, 0.12, 0.13
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 Sat23 ?xdm? 1:08m 0.65s gdm-session-worker [pam/gdm-password]
root pts/0 192.168.56.1 Sun22 4:35m 0.61s 0.00s lsof
root pts/1 192.168.56.1 11:09 6.00s 0.20s 0.01s w root

5. uptime - 告訴系統已經運行了多久

uptime命令過去只顯示系統運行多久。現在,可以顯示系統運行多久、當前有多少的用戶登錄、在過去的1,5,15分鐘里平均負載時多少。
[root@CentOS7 ~]# uptime
12:30:39 up 2 days, 19:49, 3 users, load average: 0.06, 0.08, 0.12
何為系統負載呢?
      系統平均負載被定義為在特定時間間隔內運行隊列中的平均進程樹。如果一個進程滿足以下條件則其就會位於運行隊列中: 
            它沒有在等待I/O操作的結果 
            它沒有主動進入等待狀態(也就是沒有調用'wait') 
            沒有被停止(例如:等待終止)
      一般來說,每個CPU內核當前活動進程數不大於3,則系統運行表現良好!當然這裡說的是每個cpu內核,也就是如果你的主機是四核cpu的話,那麼只要uptime最後輸出的一串字元數值小於12即表示系統負載不是很嚴重。當然如果達到20,那就表示當前系統負載非常嚴重。

6. ps - 顯示進程

       Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令。
      要對進程進行監測和控制,首先必須要瞭解當前進程的情況,也就是需要查看當前進程,而 ps 命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。總之大部分信息都是可以通過執行該命令得到的。
       ps為我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。
linux上進程有5種狀態: 
       1. 運行(正在運行或在運行隊列中等待) 
       2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)        
       3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)                4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)               5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)   ps工具標識進程的5種狀態碼: 
       D 不可中斷 uninterruptible sleep (usually IO) 
       R 運行 runnable (on run queue) 
       S 中斷 sleeping        T 停止 traced or stopped        Z 僵死 a defunct (”zombie”) process [root@linux ~]# ps aux [root@linux ~]# ps -lA [root@linux ~]# ps axjf 參數: -A :所有的 process 均顯示出來,與 -e 具有同樣的效用; -a :不與 terminal 有關的所有 process ; -u :有效使用者 (effective user) 相關的 process ; x :通常與 a 這個參數一起使用,可列出較完整信息。 輸出格式規劃: l :較長、較詳細的將該 PID 的的信息列出; j :工作的格式 (jobs format) -f :做一個更為完整的輸出。 特別說明:由於 ps 能夠支持的 OS 類型相當的多,所以他的參數多的離譜!而且有沒有加上 - 差很多!詳細的用法應該要參考 man ps。 例1.將目前屬於您自己這次登入的 PID 與相關信息列示出來
[root@CentOS7 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19160 19156 0 80 0 - 29172 wait pts/1 00:00:00 bash
0 R 0 20465 19160 0 80 0 - 34343 - pts/1 00:00:00 ps
上面這個信息其實很多,各相關信息的意義為: F:代表這個程式的flag,4代表使用者為super user S:代表這個程式的狀態 PID:這個程式的ID C:CPU 使用的資源百分比 PRI:這個是 Priority (優先執行序) 的縮寫 NI:這個是 Nice 值 ADDR:這個是 kernel function,指出該程式在記憶體的那個部分。如果是個 running的程式,一般就是『 - 』的啦! SZ:使用掉的記憶體大小 WCHAN:目前這個程式是否正在運作當中,若為 - 表示正在運作 TTY:登入者的終端 TIME:使用掉的CPU時間 CMD:所下達的指令 例2.列出目前所有的正在記憶體當中的程式
[root@CentOS7 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 191492 4300 ? Ss May20 0:28 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S May20 0:02 [kthreadd]
root 3 0.1 0.0 0 0 ? S May20 7:12 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S May20 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S May20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S May20 0:00 [rcuob/0]
root 10 0.1 0.0 0 0 ? S May20 6:10 [rcu_sched]
root 11 0.3 0.0 0 0 ? S May20 14:13 [rcuos/0]
root 12 0.0 0.0 0 0 ? S May20 0:03 [watchdog/0]
root 13 0.0 0.0 0 0 ? S< May20 0:00 [khelper]
root 14 0.0 0.0 0 0 ? S May20 0:00 [kdevtmpfs]
root 15 0.0 0.0 0 0 ? S< May20 0:00 [netns]
root 16 0.0 0.0 0 0 ? S< May20 0:00 [perf]
USER:該 process 屬於那個使用者賬號的 PID :該 process 的號碼 %CPU:該 process 使用掉的 CPU 資源百分比 %MEM:該 process 所占用的物理記憶體百分比 VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes) RSS :該 process 占用的固定的記憶體量 (Kbytes) TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者 程式,若為 pts/0 等等的,則表示為由網路連接進主機的程式 STAT:該程式目前的狀態,主要
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.xml activity_main.xml fargment_main.xml list_item_main.xml 2.java MainActivity.java ...
  • iOS應用的安全性 常常被大家忽視。 1、首先,我們可以通過軟體 下載 AppStore的ipa文件(蘋果 把開發者上傳的ipa進行了加殼再放到AppStore中), 得到ipa文件 可以分析APP 里包含的一些資源,如:圖片、plist文件、靜態wap頁、.bundle 等。 所以不要 在plis ...
  • 1:扇形進度視圖及運用 首先先創建扇形的視圖,傳入進度值 運用: 註意:在break裡面要先處理一下對象__weak LHProgressView *progressView = _progressView;上面也用到SDWebImage進行圖片載入,並把進度賦值 2:Delegate運用在開放事件 ...
  • 之前寫了一篇。 發完之後第二天實際應用到游戲之後還是發現了一些小毛病。 比如網路模塊有重覆使用(多對象)的情況。所以將靜態類該成了普通類。 比如安卓下會有些異常出現導致游戲邏輯不正常。所以網路相關的函數有些加了try塊。 然後發現寫入固定ip的方式根本不適合區域網。於是加了udp做的廣播系統,用以服 ...
  • 有時候需要從一個伺服器轉移資料庫到另一個。如果打算一下子分離所有資料庫,那麼下麵的腳本就是有用了。 生成分離腳本: SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10) + 'ALTER DATABASE [' + CONVERT(VA ...
  • 分頁存儲過程:(查詢,支持物理表、視圖、臨時表和查詢表達式) ALTER PROC [dbo].[QueryByPage] @Capacity INT, --每頁的行數 @PageNumber INT, --查詢頁的索引 @Total INT OUTPUT,--返回總數 @Query NVARCHA ...
  • ...
  • 我們一資料庫伺服器上有個作業最近幾天偶爾會遇到下麵錯誤(敏感信息已做處理),主要是報“TCP Provider: The semaphore timeout period has expired. [SQLSTATE 07008] (Error 121) OLE DB provider "SQLNC... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...