1. 程式人生 > >Linux strace工具,程序診斷、排錯、跟蹤系統呼叫和訊號量

Linux strace工具,程序診斷、排錯、跟蹤系統呼叫和訊號量

strace
跟蹤系統呼叫和訊號量,是一個很好的診斷、排錯的工具。
每行輸出都是一個系統呼叫,包括函式和返回值。

示例

--直接列印資訊的方式

[[email protected] ~]$ strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 29 vars */]) = 0
brk(0)                                  = 0x124f000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb33d554000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=63649, ...}) = 0
省略......
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
open("/dev/null", O_RDONLY)             = 3
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
read(3, "", 32768)                      = 0
close(3)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

--輸出資訊到指定檔案
[[email protected] ~]$ strace -o /tmp/cat.txt cat /dev/null


--常用引數
--參考部落格 http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

-c 統計每一系統呼叫的所執行的時間,次數和出錯的次數等.
-d 輸出strace關於標準錯誤的除錯資訊.
-f 跟蹤由fork呼叫所產生的子程序.
-ff 如果提供-o filename,則所有程序的跟蹤結果輸出到相應的filename.pid中,pid是各程序的程序號.
-F 嘗試跟蹤vfork呼叫.在-f時,vfork不被跟蹤.
-h 輸出簡要的幫助資訊.
-i 輸出系統呼叫的入口指標.
-q 禁止輸出關於脫離的訊息.
-r 打印出相對時間關於,,每一個系統呼叫.
-t 在輸出中的每一行前加上時間資訊.
-tt 在輸出中的每一行前加上時間資訊,微秒級.
-ttt 微秒級輸出,以秒了表示時間.
-T 顯示每一呼叫所耗的時間.
-v 輸出所有的系統呼叫.一些呼叫關於環境變數,狀態,輸入輸出等呼叫由於使用頻繁,預設不輸出.
-V 輸出strace的版本資訊.
-x 以十六進位制形式輸出非標準字串
-xx 所有字串以十六進位制形式輸出.

-a column
設定返回值的輸出位置.預設 為40.
-e expr
指定一個表示式,用來控制如何跟蹤.格式如下:
[qualifier=][!]value1[,value2]...
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用來限定的符號或數字.預設的 qualifier是 trace.感嘆號是否定符號.例如:
-eopen等價於 -e trace=open,表示只跟蹤open呼叫.而-etrace!=open表示跟蹤除了open以外的其他呼叫.有兩個特殊的符號 all 和 none.
注意有些shell使用!來執行歷史記錄裡的命令,所以要使用\\.
-e trace=set
只跟蹤指定的系統 呼叫.例如:-e trace=open,close,rean,write表示只跟蹤這四個系統呼叫.預設的為set=all.
-e trace=file
只跟蹤有關檔案操作的系統呼叫.
-e trace=process
只跟蹤有關程序控制的系統呼叫.
-e trace=network
跟蹤與網路有關的所有系統呼叫.
-e strace=signal
跟蹤所有與系統訊號有關的 系統呼叫
-e trace=ipc
跟蹤所有與程序通訊有關的系統呼叫
-e abbrev=set
設定 strace輸出的系統呼叫的結果集.-v 等與 abbrev=none.預設為abbrev=all.
-e raw=set
將指 定的系統呼叫的引數以十六進位制顯示.
-e signal=set
指定跟蹤的系統訊號.預設為all.如 signal=!SIGIO(或者signal=!io),表示不跟蹤SIGIO訊號.
-e read=set
輸出從指定檔案中讀出 的資料.例如:
-e read=3,5
-e write=set
輸出寫入到指定檔案中的資料.
-o filename
將strace的輸出寫入檔案filename
-p pid
跟蹤指定的程序pid.
-s strsize
指定輸出的字串的最大長度.預設為32.檔名一直全部輸出.
-u username
以username 的UID和GID執行被跟蹤的命令

--檢視Oracle pmon程序示例

[[email protected] tmp]$ ps -ef|grep ora_
oracle    2355     1  0 10:21 ?        00:00:02 ora_pmon_sean
oracle    2357     1  0 10:21 ?        00:00:02 ora_psp0_sean
oracle    2383     1  1 10:21 ?        00:03:55 ora_vktm_sean
oracle    2387     1  0 10:21 ?        00:00:00 ora_gen0_sean
oracle    2389     1  0 10:21 ?        00:00:00 ora_diag_sean
oracle    2391     1  0 10:21 ?        00:00:00 ora_dbrm_sean
oracle    2393     1  0 10:21 ?        00:00:07 ora_dia0_sean
oracle    2395     1  0 10:21 ?        00:00:00 ora_mman_sean
oracle    2397     1  0 10:21 ?        00:00:01 ora_dbw0_sean
oracle    2399     1  0 10:21 ?        00:00:01 ora_lgwr_sean
oracle    2401     1  0 10:21 ?        00:00:04 ora_ckpt_sean
oracle    2403     1  0 10:21 ?        00:00:01 ora_smon_sean
oracle    2405     1  0 10:21 ?        00:00:00 ora_reco_sean
oracle    2407     1  0 10:21 ?        00:00:03 ora_mmon_sean
oracle    2409     1  0 10:21 ?        00:00:05 ora_mmnl_sean
oracle    2411     1  0 10:21 ?        00:00:00 ora_d000_sean
oracle    2413     1  0 10:21 ?        00:00:00 ora_s000_sean
oracle    2422     1  0 10:21 ?        00:00:01 ora_arc0_sean
oracle    2426     1  0 10:21 ?        00:00:00 ora_arc1_sean
oracle    2430     1  0 10:21 ?        00:00:00 ora_arc2_sean
oracle    2432     1  0 10:21 ?        00:00:00 ora_ctwr_sean
oracle    2434     1  0 10:21 ?        00:00:00 ora_arc3_sean
oracle    2436     1  0 10:21 ?        00:00:00 ora_fbda_sean
oracle    2438     1  0 10:21 ?        00:00:00 ora_qmnc_sean
oracle    2454     1  0 10:21 ?        00:00:02 ora_cjq0_sean
oracle    2471     1  0 10:22 ?        00:00:00 ora_q000_sean
oracle    2473     1  0 10:22 ?        00:00:00 ora_q001_sean
oracle    2513     1  0 10:26 ?        00:00:00 ora_smco_sean
oracle    5609     1  0 14:42 ?        00:00:00 ora_w000_sean

--我們看下pmon程序內部的一些呼叫情況,下面擷取是的每隔3s的輸出片段,可以明顯看出pmon每隔3s會去檢視幾個重要程序的狀態資訊
[[email protected] ~]$ strace -ttT -p 2355

--看函式名字有點像獲取資源使用情況get resource usage,ru代表run,utime代表use time,stime代表system time,只是猜測
14:41:18.505309 getrusage(RUSAGE_SELF, {ru_utime={0, 574912}, ru_stime={1, 768731}, ...}) = 0 <0.000018>
14:41:18.505394 getrusage(RUSAGE_SELF, {ru_utime={0, 574912}, ru_stime={1, 768731}, ...}) = 0 <0.000014>
--獲取psp0程序狀態(Spawns Oracle background processes after initial instance startup)
14:41:18.505474 open("/proc/2357/stat", O_RDONLY) = 12 <0.000052>
14:41:18.505570 read(12, "2357 (oracle) S 1 2357 2357 0 -1"..., 999) = 247 <0.000037>
14:41:18.505645 close(12)               = 0 <0.000020>
--獲取vktm程序狀態(Virtual Keeper of Time Process)Oracle一個維持內部時鐘程序
14:41:18.505709 open("/proc/2383/stat", O_RDONLY) = 12 <0.000023>
14:41:18.505767 read(12, "2383 (oracle) S 1 2383 2383 0 -1"..., 999) = 247 <0.000028>
14:41:18.505828 close(12)               = 0 <0.000015>
--獲取gen0程序狀態(General Task Execution Process)通用任務執行程序
14:41:18.505881 open("/proc/2387/stat", O_RDONLY) = 12 <0.000022>
14:41:18.505936 read(12, "2387 (oracle) S 1 2387 2387 0 -1"..., 999) = 240 <0.000025>
14:41:18.505996 close(12)               = 0 <0.000015>
--獲取dbrm程序狀態(Database Resource Manager Process)資源管理程序
14:41:18.506048 open("/proc/2391/stat", O_RDONLY) = 12 <0.000097>
14:41:18.506181 read(12, "2391 (oracle) S 1 2391 2391 0 -1"..., 999) = 240 <0.000027>
14:41:18.506244 close(12)               = 0 <0.000016>
--獲取mman程序狀態(Memory Manager Process)記憶體管理程序,管理記憶體元件的大小調整等
14:41:18.506299 open("/proc/2395/stat", O_RDONLY) = 12 <0.000024>
14:41:18.506354 read(12, "2395 (oracle) S 1 2395 2395 0 -1"..., 999) = 240 <0.000024>
14:41:18.506413 close(12)               = 0 <0.000015>
--獲取dbw0程序狀態(Database Writer Process)這個熟悉,把buffer cache中的髒資料寫到磁碟(DBW0-DBW9 and DBWa-DBWz)
14:41:18.506467 open("/proc/2397/stat", O_RDONLY) = 12 <0.000021>
14:41:18.506522 read(12, "2397 (oracle) S 1 2397 2397 0 -1"..., 999) = 245 <0.000025>
14:41:18.506580 close(12)               = 0 <0.000015>
--獲取lgwr程序狀態(Log Writer Process)日誌寫程序,將log buffer中的redo寫入到online redo log
14:41:18.506631 open("/proc/2399/stat", O_RDONLY) = 12 <0.000021>
14:41:18.506683 read(12, "2399 (oracle) S 1 2399 2399 0 -1"..., 999) = 242 <0.000023>
14:41:18.506738 close(12)               = 0 <0.000015>
--獲取ckpt程序狀態(Checkpoint Process)檢查點程序,通知dbwr寫程序,並將最新的檢查點資訊寫到所有資料檔案頭部和控制檔案中
14:41:18.506789 open("/proc/2401/stat", O_RDONLY) = 12 <0.000021>
14:41:18.506840 read(12, "2401 (oracle) S 1 2401 2401 0 -1"..., 999) = 244 <0.000024>
14:41:18.506896 close(12)               = 0 <0.000015>
--獲取smon程序狀態(System Monitor Process)系統監視程序,處理如例項恢復、死事務恢復、和一些維護任務(臨時空間回收、資料字典清理、undo表空間管理)
14:41:18.506946 open("/proc/2403/stat", O_RDONLY) = 12 <0.000022>
14:41:18.506998 read(12, "2403 (oracle) S 1 2403 2403 0 -1"..., 999) = 244 <0.000024>
14:41:18.507054 close(12)               = 0 <0.000098>
--獲取ctwr程序狀態(Change Tracking Writer Process)塊修改跟蹤寫程序,Tracks changed data blocks as part of the Recovery Manager block change tracking feature
14:41:18.507201 open("/proc/2432/stat", O_RDONLY) = 12 <0.000026>
14:41:18.507265 read(12, "2432 (oracle) S 1 2432 2432 0 -1"..., 999) = 240 <0.000026>
14:41:18.507323 close(12)               = 0 <0.000017>
14:41:18.507398 times({tms_utime=57, tms_stime=176, tms_cutime=0, tms_cstime=0}) = 430963879 <0.000014>
14:41:18.507451 times({tms_utime=57, tms_stime=176, tms_cutime=0, tms_cstime=0}) = 430963879 <0.000013>
14:41:18.507503 poll([{fd=9, events=POLLIN|POLLRDNORM}], 1, 0) = 0 (Timeout) <0.000017>
14:41:18.507573 times({tms_utime=57, tms_stime=176, tms_cutime=0, tms_cstime=0}) = 430963879 <0.000013>
14:41:18.507620 poll([{fd=9, events=POLLIN|POLLRDNORM}], 1, 3000^CProcess 2355 detached
 <detached ...>
 
[[email protected] proc]$ cat /proc/2357/stat
2357 (oracle) S 1 2357 2357 0 -1 4202496 18182 53541 0 0 70 218 2 20 20 0 1 0 5205 750350336 4198 18446744073709551615 4194304 197998444 140724114573664 140724114563384 269900231018 0 0 100680199 1098923256 18446744071581119782 0 0 17 0 0 0 0 0 0


--下面擷取是的每隔60s會輸出一次的片段
[[email protected] ~]$ strace -ttT -p 2355

15:08:07.638837 socket(PF_NETLINK, SOCK_RAW, 0) = 12 <0.000021>
15:08:07.638880 bind(12, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 <0.000011>
15:08:07.638915 getsockname(12, {sa_family=AF_NETLINK, pid=2355, groups=00000000}, [12]) = 0 <0.000009>
15:08:07.638949 sendto(12, "\24\0\0\0\26\0\1\3\327\262PY\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20 <0.000024>
15:08:07.638998 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\24\0\2\0\327\262PY3\t\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 108 <0.000016>
15:08:07.639044 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"@\0\0\0\24\0\2\0\327\262PY3\t\0\0\n\200\200\376\1\0\0\0\24\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 128 <0.000013>
15:08:07.639084 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\327\262PY3\t\0\0\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 20 <0.000010>
15:08:07.639119 close(12)               = 0 <0.000073>
15:08:07.639220 socket(PF_NETLINK, SOCK_RAW, 0) = 12 <0.000013>
15:08:07.639255 bind(12, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 <0.000010>
15:08:07.639287 getsockname(12, {sa_family=AF_NETLINK, pid=2355, groups=00000000}, [12]) = 0 <0.000009>
15:08:07.639318 sendto(12, "\24\0\0\0\26\0\1\3\327\262PY\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20 <0.000016>
15:08:07.639356 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\24\0\2\0\327\262PY3\t\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 108 <0.000012>
15:08:07.639396 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"@\0\0\0\24\0\2\0\327\262PY3\t\0\0\n\200\200\376\1\0\0\0\24\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 128 <0.000012>
15:08:07.639433 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\327\262PY3\t\0\0\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 20 <0.000010>
15:08:07.639467 close(12)               = 0 <0.000012>
15:08:07.639505 open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 12 <0.000018>
15:08:07.639549 fstat(12, {st_mode=S_IFREG|0644, st_size=182, ...}) = 0 <0.000010>
15:08:07.639584 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f19df9a9000 <0.000014>
15:08:07.639622 read(12, "127.0.0.1   localhost sean.ora11"..., 4096) = 182 <0.000020>
15:08:07.639673 read(12, "", 4096)      = 0 <0.000010>
15:08:07.639703 close(12)               = 0 <0.000010>
15:08:07.639731 munmap(0x7f19df9a9000, 4096) = 0 <0.000032>
15:08:07.639789 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 12 <0.000023>
15:08:07.639831 connect(12, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 <0.000015>
15:08:07.639871 getsockname(12, {sa_family=AF_INET, sin_port=htons(33248), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 <0.000009>
15:08:07.639907 connect(12, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0 <0.000009>
15:08:07.639938 connect(12, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("192.0.2.66")}, 16) = 0 <0.000011>
15:08:07.639971 getsockname(12, {sa_family=AF_INET, sin_port=htons(27021), sin_addr=inet_addr("192.0.2.66")}, [16]) = 0 <0.000009>
15:08:07.640003 close(12)               = 0 <0.000014>
15:08:07.640039 socket(PF_NETLINK, SOCK_RAW, 0) = 12 <0.000012>
15:08:07.640069 bind(12, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 <0.000009>
15:08:07.640099 getsockname(12, {sa_family=AF_NETLINK, pid=2355, groups=00000000}, [12]) = 0 <0.000008>
15:08:07.640130 sendto(12, "\24\0\0\0\22\0\1\3\327\262PY\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20 <0.000126>
15:08:07.640333 recvmsg(12, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\360\3\0\0\20\0\2\0\327\262PY3\t\0\0\0\0\4\3\1\0\0\0I\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 2024 <0.000013>
15:08:07.640474 close(12)               = 0 <0.000894>
15:08:07.641423 getsockopt(0, SOL_SOCKET, SO_SNDBUF, 0x7ffcbe11d13c, 0x7ffcbe11d138) = -1 ENOTSOCK (Socket operation on non-socket) <0.000010>
15:08:07.641465 getsockopt(0, SOL_SOCKET, SO_RCVBUF, 0x7ffcbe11d13c, 0x7ffcbe11d138) = -1 ENOTSOCK (Socket operation on non-socket) <0.000009>
15:08:07.641501 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 12 <0.000023>
15:08:07.641545 fcntl(12, F_SETFL, O_RDONLY|O_NONBLOCK) = 0 <0.000009>
15:08:07.641581 connect(12, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000062>
15:08:07.641681 getsockopt(12, SOL_SOCKET, SO_SNDBUF, [16384], [4]) = 0 <0.000009>
15:08:07.641716 getsockopt(12, SOL_SOCKET, SO_RCVBUF, [87380], [4]) = 0 <0.000008>
15:08:07.641751 times({tms_utime=65, tms_stime=194, tms_cutime=0, tms_cstime=0}) = 431124768 <0.000008>
15:08:07.641783 times({tms_utime=65, tms_stime=194, tms_cutime=0, tms_cstime=0}) = 431124768 <0.000008>
15:08:07.641817 rt_sigaction(SIGPIPE, {SIG_IGN, ~[ILL ABRT BUS FPE SEGV USR2 XCPU XFSZ SYS RTMIN RT_1], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x3ed780f7e0}, {SIG_IGN, ~[ILL ABRT BUS FPE KILL SEGV USR2 STOP XCPU XFSZ SYS RTMIN RT_1], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x3ed780f7e0}, 8) = 0 <0.000009>
15:08:07.641884 times({tms_utime=65, tms_stime=194, tms_cutime=0, tms_cstime=0}) = 431124768 <0.000008>
15:08:07.641917 times({tms_utime=65, tms_stime=194, tms_cutime=0, tms_cstime=0}) = 431124768 <0.000600>
15:08:07.642567 poll([{fd=9, events=POLLIN|POLLRDNORM}, {fd=12, events=POLLOUT}], 2, 3000) = 1 ([{fd=12, revents=POLLOUT|POLLERR|POLLHUP}]) <0.000073>
15:08:07.642693 getsockname(12, {sa_family=AF_INET, sin_port=htons(33518), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 <0.000011>
15:08:07.642774 write(12, "\0h\0\0\1\0\0\0\1:\1,\0\0 \0\377\377\177\10\0\0\1\0\0.\0:\0\0\0\0"..., 104) = -1 ECONNREFUSED (Connection refused) <0.000013>
15:08:07.642830 close(12)               = 0 <0.000021>
15:08:07.642919 times({tms_utime=65, tms_stime=194, tms_cutime=0, tms_cstime=0}) = 431124768 <0.000010>
15:08:07.642959 poll([{fd=9, events=POLLIN|POLLRDNORM}], 1, 3000^CProcess 2355 detached
 <detached ...>


相關推薦

Linux strace工具程序診斷跟蹤系統呼叫訊號

strace 跟蹤系統呼叫和訊號量,是一個很好的診斷、排錯的工具。 每行輸出都是一個系統呼叫,包括函式和返回值。 示例--直接列印資訊的方式 [[email protected] ~]$ strace cat /dev/null execve("/bin/cat

Linux 中用 strace 追蹤系統呼叫訊號值 (原文棒棒噠)

         間接轉載地址:http://www.cnblogs.com/itech/archive/2013/02/28/2937836.html 什麼是strace 開啟man strace,我們能看到對strace的最簡潔的介紹就是”strace – tr

嵌入式Linux併發程式設計程序間通訊方式訊號訊號機制,檢視新號kill -l,常用訊號訊號命令kill [-signal] pidkillall [-u user | prog]

1,訊號機制 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式 (一個程序在任何條件下,都可以隨時的接收訊號,不需要其他的處理) Linux核心通過訊號通知使用者程序,不同的訊號型別代表不同的事件 Linux對早期的unix訊號機制進行了擴充

使用mybatis自帶工具自動生成表對應domainmapper.xml以及dao

upd stat javac sch val char 數據庫名 tab decimal 引用:http://blog.csdn.net/p793049488/article/details/40422975 1、需要手動建表,如T_PRI_USER 2、新建配置文件g

看到一個詞語提取小工具分享給有標簽詞庫需求的同學們

詞庫 搜索 新詞發現 標簽 自然語言處理 關於詞語小工具的描述快戳下面鏈接~~~ https://forum.huaweicloud.com/thread-8391-1-1.html 不想看文章,想立即試用小工具的,請戳下面~~~http://fe2e6fd859034d40a3269f7

linux系統elasticsearchELK 安裝配置及示例

簡介 開始學習安裝elasticsearch時,出現過很多錯誤,導致無法進行安裝的操作。該文章是供自己安裝的總結及後面的小夥伴們能更好更快的解決問題。安裝中出現過問題會在下面描述。 一 、部署準備 檔案準備 elk-5.4.0.tar.gz 部署環境 C

linux下elasticsearchelk 安裝配置及示例

簡介 開始學習安裝elasticsearch時,出現過很多錯誤,導致無法進行安裝的操作。該文章是供自己安裝的總結及後面的小夥伴們能更好更快的解決問題。安裝中出現過問題會在下面描述。 一 、部署準備 檔案準備 elk-5.4.0.tar.gz 部署環境 C

嵌入式Linux併發程式設計程序間通訊方式System V IPC訊號燈集建立/開啟semget()初始化semctl()P/V操作semop()sembuf結構體定義

文章目錄 1,System V IPC - 訊號燈 2,System V IPC - 訊號燈特點 3,System V訊號燈使用步驟 3.1,訊號燈建立/開啟 semget() 3.2,訊號燈初始化 semctl()

嵌入式Linux併發程式設計程序間通訊方式System V IPC訊息佇列開啟/建立msgget(), 傳送訊息msgsnd()格式接收訊息msgrcv()控制訊息佇列 msgctl()

文章目錄 1,訊息佇列 2,訊息佇列結構 3,訊息佇列使用步驟 3.1,開啟/建立訊息佇列 msgget() 3.1.1,開啟/建立訊息佇列---示例msgget() 3.2,向訊息佇列傳送訊息 msgs

嵌入式Linux併發程式設計程序間通訊方式System V IPC物件ftok()共享記憶體使用步驟建立shmget()對映shmat()撤銷對映shmdt()控制shmctl()注意

文章目錄 1,System V IPC 2,使用IPC物件的大致流程 3,生成KEY值ftok() ftok示例 4,共享記憶體 4.1,共享記憶體使用步驟 4.2,共享記憶體建立 shmget()

嵌入式Linux併發程式設計程序間通訊方式無名管道無名管道特點無名管道建立pipe()獲取管道大小管道斷裂

1,Linux下的程序間通訊機制 Linux下的程序間通訊機制 應用 早期UNIX程序間通訊方式(很多是從Unix繼承的) 無名管道(pipe) 本地通訊,用於一臺計算機內部不同程序之間的通訊

嵌入式Linux併發程式設計程序間通訊方式有名管道有名管道特點有名管道建立mkfifo()

1,有名管道的特點 對應管道檔案,可用於任意程序之間進行通訊:有名管道建立好之後,在系統中有實際的檔案和有名管道對應,任意兩個程序可以通過路徑和檔名指定同一個有名管道進行通訊 開啟管道時可指定讀寫方式:有名管道用open()開啟的時候可以指定不同的讀寫方

linux檢視埠程序是否存在是否被佔用如何殺死程序

在維護linux伺服器的時候,或者安裝一些要使用的軟體和服務時。難免會遇到一些像: 埠開沒開?這個東西安裝執行成功了麼?埠是不又被佔用了?。。等等這樣的坑坑。。 往往這個時候是不是一臉懵逼。 咳咳~~言歸正傳接下來就給大家推薦幾個命令來檢視一下這些坑吧

三十三Linux 程序訊號——中斷系統呼叫函式可重入性

33.1 中斷系統呼叫 程序呼叫 “慢” 系統呼叫時,如果發生了訊號,核心會重啟系統呼叫。 慢系統呼叫 可能會永久阻塞的系統呼叫 從終端裝置、管道或網路裝置上的檔案讀取 向上述檔案寫入 某些裝置上的檔案開啟 pause 和 wait 系統呼叫

【進階】從linux到android程序的方方面面

最近在閱讀《Linux核心設計與實現》,這裡做一下linux中程序相關的知識點整理,以及android中程序的淺析。 下面1,2小節整理自《Linux核心設計與實現》 第三章《程序管理》和第四章《程序排程》。第3節整理android中程序的知識點。

arm-linux-系列工具ld,ar,as,objcopy

一、編譯器相關知識學習 GNU GCC簡介: GNU GCC是一套面向嵌入式領域的交叉編譯工具,支援多種程式語言、多種優化選項並且能夠支援分步編譯、支援多種反彙編方式、支援多種除錯資訊格式,目前支援X86、ARM7、StrongARM、PPC4XX、MPC8XX、MIPS

centOS搭建SVN伺服器實現許可權控制及linux與windows客戶端的使用

目錄 1.在centOS上搭建svn_server 1.查詢是否已安裝軟體包及安裝軟體包  rpm -qa subversion #查詢是否安裝 yum -y install subversion

linux strace 工具的使用

簡介 strace常用來跟蹤程序執行時的系統呼叫和所接收的訊號。 在Linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置(比如讀取磁碟檔案,接收網路資料等等)時,必須由使用者態模式切換至核心態模式,通 過系統呼叫訪問硬體裝置。strace可以跟蹤到一個程序產

一個部署了tomcat服務的linux服務器運行一段時間後出現內存空間不足的問題

denied dev inux 使用情況 往裏面 a.out leo 輸出 byte —— 前段時間項目上的事比較忙,期間筆記都是臨時存在本地txt,這些天有點時間了,整理出來,以便日後查看; linux 查看內存使用情況:free -m 釋放緩

DFS故障診斷

DFS Troubleshooting在運維DFS的時候經常會遇到這樣那樣的問題,導致DFS復制效果不佳,部分文件無法同步復制,下面就列舉2個常見的問題並說明一下解決方法。1.DFS報錯出現共享沖突,無法進行正常復制首先我們通過自帶的診斷報告,導出診斷的結果,我們可以在報告中看到有關於共享沖突的明細,可以找到