freebsd添加lib搜索路径的方法:
(1) 添加到LD_LIBRARY_PATH,这个多数人都知道了,坏处是传递的时候容易被砍掉,如apache
(2) ld.so.conf,设置了完全没用,不要试这个。。。
(3) ldconfig -m PATH,一次加载一次有效
(4) 修改/usr/local/libdata/ldconfig/,例如mysql,可以建一个文件/usr/local/libdata/ldconfig/mysql
内容是(假设装到了/usr/local/mysql):
/usr/local/mysql/lib/mysql
然后/etc/rc.d/ldconfig restart就行了

FreeBSD修改可执行文件路径和库文件路径
1、库文件路径修改:
FreeBSD和linux不是一样的。
在/etc/下加入ld-elf.so.conf里面写上你的目录,比如/usr/local/samba/lib,没有的话创建一个。
然后
sudo /etc/rc.d/ldconfig restart
or
/etc/rc.d/ldconfig forcerestart
好了,查看库文件路径
# ldconfig -r
# ldconfig -r | less
或者/etc/rc.conf里加ldconfig_path="",这是系统起来的时候再设置的。

2、可执行文件路径修改:
 
在用户目录下面,比如/root或者/home/ztz0223下面,打开.cshrc文件,修改set path部分:
# $FreeBSD: release/9.1.0/share/skel/dot.cshrc 242850 2012-11-10 06:05:04Z eadler $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
# more examples available at /usr/share/examples/csh/
#
alias h          history 25
alias j          jobs -l
alias la     ls -aF
alias lf     ls -FA
alias ll     ls -lAF

# A righteous umask
umask 22

set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)

修改上面set path比如:
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin
/usr/local/samba/bin $HOME/bin)



来自:https://www.xuebuyuan.com/1082615.html
https://www.cyberciti.biz/faq/freebsd-ldconfig-v-lost-dynamic-linker-configuration/
Microsoft Word .doc和Adobe .pdf文件的文本内容也可以进行比较但不能编辑。
https://www.bilibili.com/read/mobile?id=14506059

一、原理
Beyond Compare每次启动后会先检查注册信息,试用期到期后就不能继续使用。解决方法是在启动前,先删除注册信息,然后再启动,这样就可以永久免费试用了。

二、下载
首先下载Beyond Compare最新版本,链接如下:https://www.scootersoftware.com/download.php


三、安装
下载完成后,直接安装。

四、创建BCompare文件
1.进入Mac应用程序目录下,找到刚刚安装好的Beyond Compare,路径如下/Applications/Beyond Compare 2.app/Contents/MacOS。
2.修改启动程序文件BCompare为BCompare.real。
3.在当前目录下新建一个文件BCompare,文件内容如下:
/Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
#!/bin/bash
rm "/Users/$(whoami)/Library/Application Support/Beyond Compare/registry.dat"
"`dirname "$0"`"/BCompare.real $@
4.保存BCompare文件。
5.修改文件的权限:
chmod a+x /Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
以上步骤完成后,再次打开Beyond Compare就可以正常使用了,enjoy it。
转自:https://blog.csdn.net/wu__di/article/details/82390196
mac查看当前调用tcp的进程并关闭指定进程:
一)查看本机macbook打开的端口:
lsof -iTCP -sTCP:LISTEN
MotionPro  2766 jackXiang   16u  IPv4 0xc8299b5de6c3cc43      0t0  TCP localhost:60012 (LISTEN)
Adobe\x20  2858 jackXiang   13u  IPv4 0xc8299b5dea54da73      0t0  TCP localhost:15292 (LISTEN)
com.docke  2890 jackXiang    8u  IPv4 0xc8299b5dea125b5b      0t0  TCP localhost:56199 (LISTEN)
phpstorm   2918 jackXiang  186u  IPv4 0xc8299b5dea91527b      0t0  TCP localhost:6942 (LISTEN)
phpstorm   2918 jackXiang  362u  IPv4 0xc8299b5deaa2a8b3      0t0  TCP localhost:63342 (LISTEN)

二)查看连接远程端口:
lsof -iTCP -dTCP:LISTEN
lsof -iTCP -dTCP:LISTEN|grep Google   #查看google浏览器连接的端口
safara进程:
/System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
  502 57037     1   0 11:42上午 ??         0:06.24 /System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
#lsof -p 2072  #PID
php-fpm 2072 root  DEL       REG                0,5               22380 /dev/zero
php-fpm 2072 root    0u      CHR                1,3       0t0      7732 /dev/null
php-fpm 2072 root    1u      CHR                1,3       0t0      7732 /dev/null

查看:



ps -o 'pid,ppid,pgid,sid,comm' -C nohup
  PID  PPID  PGID   SID COMMAND
7478 32279  7478 32251 nohup

cat nohup.c

make nohup
cc     nohup.c   -o nohup


#ps -C nohup s
  UID   PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
    0  2072 0000000000000000 0000000000000000 00000000000000001 0000000180014a06 Ss   ?          0:07 php-fpm: master process (

屏蔽了SIGHUP,终端关闭的时候,会忽略终端发送的SIGHUP信号,继续运行服务。

#kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

IGNORED           0000000000001000

来自:https://mp.weixin.qq.com/s/hMXwg9yUSN8rC12HeVp2RA
解决方法有三种:

1、当CPU数超出终端大小不多时,可以通过ALT + Enter 最大化当前窗口(SecureCRT客户端时);

2、mpstat -P ALL

3、sar -P ALL

方法1一般不会有效果。这里主要说要方法2和方法3。
接下来我要说的是用top命令,按数字1键,查看CPU各个核心使用情况,提示:Sorry, terminal is not big enough。
在此之前的服务器2颗6核CPU,开启超线程24。当我们遇到这个情况的时候,用Alt +Enter最大化终端窗口就Ok了[SecureCRT软件]。
现在的服务器2颗8核,超线程32核,此时,再用Alt +Enter最大化终端窗口[SecureCRT软件],Sorry, terminal is not big enough
没办法了吗?网上说用putty,上次我匆匆试了一下,没有搞定,就另想它法了,linux系统的开源人,为我提供了许多好用的命令,

mpstat命令,结合一些参数,如下:

mpstat命令详解:
http://www.bdkyr.com/view.php?id=73

mpstat -P ALL
#执行结果如图


有人问了,可以看,但是不实时呀。别急,还有呢,再加点参数:

mpstat -P ALL 2 1000

这样就可以搞定了,不信你找一台2路8核的服务器,试试,很有效果的,shell搞的话,可以自己弄个更强大,更人性化的实时查看工具。

来自:http://www.361way.com/terminal-big-enough/4514.html
使用安装包安装的phpstrom无法正常启动,原因是原默认wwwroot是 /data/www,现在系统禁用了对根目录的使用所以只能将dbpath指向到自定义目录,如
将原来的目录迁移到/var/data,在/data下面做软链接即可,原来的升级备份位置在哪儿?
系统升级完成后桌面会出现一个目录 迁移的项目 将这个目录下的/data/db 下的文件拷贝到新的dbpath就可以了。
原文链接:https://blog.csdn.net/StillCity/article/details/102562281


二)如何做软链接?ln -sf /var/data /data
在这次mac升级系统后,我发现我的/data目录消失了,于是我执行了命令:

mkdir /data
结果发现居然提示我Read-Only filesystem,即使加上了sudo也没用

在我查阅相关资料后找到了解决办法(关闭SIP,然后输入sudo mount -uw /,创建文件夹添加权限,最后启用SIP),具体步骤如下:

1、重启mac,按住Command+R,等到系统进入安全模式。

2、选择一个账户,然后点击屏幕上方的工具栏找到命令行工具。

3、执行,命令 csrutil disable

4、重启电脑后,不要进入安全模式,执行命令sudo mount -uw /

5、执行命令sudo mkdir /data

6、执行命令sudo chmod 777 /data

7、重启电脑,进入安全模式,执行命令csrutil enable (开启SIP)
原文链接:https://blog.csdn.net/weiyoushi4001/article/details/102928575

大体运行命令:



背景:我一看这文章就知道是架构平台部的兄弟的操作性更大一些,谁投的稿不清楚,但这个操作能感受到浓浓的鹅厂气息,这些年过去了,系统底层依然没有大变化,估计这些操作还能再用上十年,特梳理总结,以便“后来人”,也包括自己备忘。女程序员少,会写VIM、GDB、Linux命令、正则表达式、Makefile的女程序员妹子简直就是至宝啊,尽管ls –lhS ,中间横写得不对,但这不是重点,正是留言的好机会,请年轻程序员男好生把握,哥也年轻过,别后悔莫及,机会就让给你们了,哈哈。

1)磁盘满了查看/一级目录的报警:
du -h --max-depth=1


2)将当前目录下各文件以从大到小的顺序进行展示:
ls -lhS


3)查看日志最近200行:
history | tail -n 200


4)top cpu内存排序:
top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况;按 P 实现按 CPU 降序排列,按 M 按内存降序排列。

5)编写的二进制代码推到后台监听端口9999:
nohup xxx 9999

6)查看程序开启的端口:
netstat -anp | grep -w 9999

7)tcpdump抓自己开发的服务器server并调试,学后面的正则匹配:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

8)对日志某些列判断性打印:
awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212

9)动态链接没有加载文件:
lsof xxx.so  #进程加载的一个外部 so 动态库对应功能并没有生效
GDB 调试时发现,该 so 并没有导出函数 fffff 。
nm -D xxx.so | grep fffff

10)停掉了测试进程 xxx:
ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9

11)并没有导出函数 fffff ,证实了该 so 确实没有导出该函数。
nm -D xxx.so | grep fffff

来源自vimer、女程序员说:https://mp.weixin.qq.com/s/WsWFcw-xoRTFOcz1TQqDBw
#ls -i
24229218 go  805308641 -w,

这样删不掉:
#rm -i 805308641
rm: cannot remove ‘805308641’: No such file or directory


这样删才行:
find ./* -inum 805308641 -delete


来自:https://blog.csdn.net/wb736/article/details/79756956

Macbook:
find ./* -inum 1442584 |xargs rm -f #样例,使用find和xargs结合删除ddd文件(无法使用-i参数进行删除确认)
mac本下实践Ok如下:
echo  `find ./* -inum 22266353 `
./-p
rm -f  `find ./* -inum 22266353 `   #成功删除

find ./* -inum 22266353 -exec rm -i {} \;
rm: ./-p: is a directory
find ./* -inum 13287477 -exec rm -r -i {} \;   #成功删除
remove ./~? y
现象:init 0 关闭系统 出现错误提示,阿里专有云的运维兄弟反馈说是没有完全关闭:
再登录下:runlevel  ,说是操作系统bug。
来自:https://developer.aliyun.com/ask/107789?spm=a2c6h.13159736
macOS 升级到 Catalina之后,使用SecureCRT报如下错误

The permissions on the "/cores" directory need to be changed to
include write permission for "other".

Please execute (or ask an admin to execute) the following from a
terminal window:

sudo chmod go+w /cores

If you would prefer not to change the permissions on the /cores
folder, you can turn off the Global option "Create core file when
application crashes".



应该是macOS的权限控制严格了,导致CRT没有权限访问/cores文件夹,这里关掉CRT崩溃时创建core转储文件即可(实践发现:这个项是没有 checked的,还是老老实实的执行sudo chmod o+w /cores命令后重启后secureCRT就好了。)

Option --> Global Options 取消 Create core file when application crashes 前面的复选框选择即可

来自:https://blog.90.vc/archives/93.html
想对指针类型里装的地址改动,在函数参数里需要两个**表明它是一个指向指针的指针(也就是传的是指针q的地址) ,ptr_copy(char ** d,char *s){ *d = s;} ,赋值里注意一下是*d =s(*d就是传指针地址的址,不再是值,也就是不会被在函数完成销毁后,外面值不会变,因为传的是指针q的地址。),也就是d里存指针地址*d表示,*d=s,s就是一个地址刚好能赋值。
更多说明帮助理解传参部分:
c语言菜鸟指针传递 问题 void func(char **p) {} int main(void) { char *q=null; func(&q); } p被赋值了神马 为什么俩星号?
p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量。既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址!

void func(char **p) {} //函数参数是指向指针的指针
int main(void)
{
char *q=null; //q定义为指针类型
func(&q); //&q,是取q的地址,q是一个指针类型,所以&q就是指针q的地址,即向指针的指针
}

来自:https://zhidao.baidu.com/question/686311732439253092.html


问:运行的以下clang代码,我希望输出ptr3=123与var相同ptr2的结果,但是结果是ptr3=(null)。如何修改我想要的结果代码?

gcc a.c -o a
./a
ptr2=123
ptr3=1PTI

让我们来看看您的“复制”功能:

void ptr_copy(char* d, char* s)
{
    d = s;
}
在函数中,变量d是局部变量。一旦函数返回并d超出范围并终止其生命,对它的分配将丢失。

这使您ptr3在main函数中留下未初始化的变量,使用它会导致未定义的行为 -

如果要复制指针,则需要通过将指针传递给指针本身来模拟按引用传递:

void ptr_copy(char** d, char* s)
{
    *d = s;
}
并称其为

ptr_copy(&ptr3, ptr)

需要的是一个不同的ptr_copy功能,如下所示:

void ptr_copy(char** dst, char* src) {
    (*dst) = src;
}

ptr_copy(&ptr3, ptr);
这个想法是您将内容填充ptr到ptr3存储的位置(因此&ptr3,不是ptr3)。

当您将指针传递给函数时,该指针的值将被传递(即给定指针指向的地址)。因此,d内部ptr_copy的指针不同于(与该指针具有相同的值,但它位于内存的另一部分中)不同的指针。这就是为什么分配,更改地址指向的原因,但是对却没有任何作用。

确实考虑一个功能

void value_copy(int d, int s) {
    d = s;
}
int i1 = 3;
int i3 = 2;
value_copy(i3, i1);
您不希望i3在调用后等于3 value_copy(),对吗?

正确调用如下:




#make a.c
cc     a.c   -o a

#./a
ptr2=123
ptr3=123


来自:https://stackoverflow.com/questions/59084119/copy-string-to-pointer-failed-in-function-in-clang



经GDB调试一下,发现其经过char ** d传参数进入函数后,实现了对传入的指针传址的d进行了修改,返回时也是作了修改,所以能正确指向123,GDB在打印时print ptr就是地址和值,如下:
(gdb) l
8       int main(){
9           char *ptr = "123";
10          char* ptr2;
11          char* ptr3;
12
13          ptr2 = ptr;
14          printf("ptr=%p\n", ptr);
15          printf("ptr2=%p\n", ptr2);
16          ptr_copy(&ptr3, ptr);
17          printf("ptr3=%p\n", ptr3);
(gdb) p ptr
$1 = 0x400670 "123"
(gdb) n
14          printf("ptr=%p\n", ptr);
(gdb) s
ptr=0x400670
15          printf("ptr2=%p\n", ptr2);

(gdb) p ptr
$3 = 0x400670 "123"
(gdb) s
ptr2=0x400670
16          ptr_copy(&ptr3, ptr);
(gdb) s
ptr_copy (d=0x7fffffffe498, s=0x400670 "123") at a.c:5
5           *d = s;
(gdb) p d
$4 = (char **) 0x7fffffffe498
(gdb) s
6       }

(gdb) s
main () at a.c:17
17          printf("ptr3=%p\n", ptr3);
(gdb) p ptr3
$6 = 0x400670 "123"

经过函数的运作,这个ptr,ptr2,ptr3都指向了0x400670,也就是123。
问题,之前以为是redis占用太多内存,后来发现是操作系统有问题:
free -m
             total       used       free     shared    buffers     cached
Mem:          7865       6138       1726          0        326       5110
-/+ buffers/cache:        701       7163

echo 1 > /proc/sys/vm/drop_caches

free -m
             total       used       free     shared    buffers     cached
Mem:          7865        530       7335          0          0         19

===============================================
Linux cached过高问题,手动释放cached

To free pagecache:  echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:  echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:  echo 3 > /proc/sys/vm/drop_caches

来自:https://www.cnblogs.com/yanwei-wang/p/8133888.html
ss -lnt
LISTEN     0      128                                                     *:57840                                                  *:*

sudo lsof -i tcp:57840  
rpc.statd 1453 rpcuser    9u  IPv4  13387      0t0  TCP *:57840 (LISTEN)

ps -ef|grep 1453          
rpcuser   1453     1  0  2018 ?        00:00:00 rpc.statd

rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6.x86_64

ls /etc/init.d/nfs*

/etc/init.d/nfslock status

vi /etc/services
nfs             2049/tcp        nfsd shilp      # Network File System
nfs             2049/udp        nfsd shilp      # Network File System
nfs             2049/sctp       nfsd shilp      # Network File System

找到里面的 nfs ,在前面加 # 注释掉,重启,我直接停掉服务。
/etc/init.d/nfslock stop
Stopping NFS statd:                                        [  OK  ]

来自:https://blog.csdn.net/maxuearn/article/details/79879607
https://jackxiang.com/post/10343/,出现磁盘等待wait较高,如下:
iostat -x 2 5  # %util 出现100,设备是挂载的dm-0
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     2.00    0.00   0.00 100.00



#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。


实践如何不用重启直接生效/etc/fstab的方法:
修改过/etc/fstab后mount -a 即可生效

      -a, --all
              Mount all filesystems (of the given types) mentioned in fstab.



二)查找iostat与df -h,挂载磁盘dm-0的对应关系。
cd /dev/mapper/
ll
ddf1_4c5349202020202010000055000000004711471100001450p1 -> ../dm-1

dmsetup ls|grep ddf1_4c5349202020202010000055000000004711471100001450p1
ddf1_4c5349202020202010000055000000004711471100001450p1 (253:1)

df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p1'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p1  194M   34M  151M  19% /boot

双出现:dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     2.00    0.00   0.00 100.00
df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p3'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p3  119G  2.4G  110G   3% /

指向boot目录。
反证:以为是卸载了所有的mount目录iowait就好,实践发现并没有好,负载依然高:




ddf1_4c5349202020202010000055000000004711471100001450p1 通过下面命令也能看:


来自:https://www.iteye.com/blog/andnnl-2236548
磁盘有问题:
sudo badblocks -s -v -o sdbbadblocks.log /dev/sda  #出现一堆的坏块编号

dmesg |less -i     #jbd2,当有硬盘坏道时,通常在dmesg输出的信息中会有 Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
NFO: task jbd2/dm-3-8:526 blocked for more than 120 seconds.
      Not tainted 2.6.32-431.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
jbd2/dm-3-8   D 0000000000000002     0   526      2 0x00000000


查看第2个CPU上的程序定位到jbd2:
|grep -v '\[' 去掉系统服务进程

ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep -v '\['
ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep  '\['

ls -l /dev/dm-3
brw-rw---- 1 root disk 253, 3 Nov 11 14:59 /dev/dm-3

ps -LF -p 526   #看它的主进程
UID        PID  PPID   LWP  C NLWP    SZ   RSS PSR STIME TTY          TIME CMD
root       526     2   526  0    1     0     0   2 Nov11 ?        00:00:00 [jbd2/dm-3-8]

lsof -nPp 526
COMMAND   PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
jbd2/dm-3 526 root  cwd       DIR  253,3     4096    2 /
jbd2/dm-3 526 root  rtd       DIR  253,3     4096    2 /
jbd2/dm-3 526 root  txt   unknown                      /proc/526/exe


dmraid -r  #man dmraid
/dev/sda: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0
/dev/sdb: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0


lsblk -f   #RAID1:数据安全性高,即同样的数据在另一块盘上备份一份,硬盘的容量也就减少一半。
NAME                                                               FSTYPE          LABEL UUID                                 MOUNTPOINT
sdb                                                                ddf_raid_member       LSI     \x10                        
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)                                                                
  ├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4                  bef5de45-511b-41c2-b487-6cf98faf978a /boot
  ├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap                  861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
  └─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4                  410be0c5-9b55-490e-b924-606d46182ea2 /
sda                                                                ddf_raid_member       LSI     \x10                        
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)                                                                
  ├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4                  bef5de45-511b-41c2-b487-6cf98faf978a /boot
  ├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap                  861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
  └─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4                  410be0c5-9b55-490e-b924-606d46182ea2 /

dmraid -s
*** Group superset .ddf1_disks
--> Active Subset
name   : ddf1_4c5349202020202010000055000000004711471100001450
size   : 285155328
stride : 128
type   : mirror
status : ok
subsets: 0
devs   : 2
spares : 0


步骤一) top命令显示后 按1
             Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,  0.0%id,100.0%wa,  0.0%hi,  0.0%si,  0.0%st
             wa -- iowait  AmountoftimetheCPUhasbeenwaitingfor I/O to complete.

步骤二)iostat -x 2 5  #定位各个磁盘读写哪个高一些,iostat 会每2秒更新一次,一共打印5次信息, -x 的选项是打印出扩展信息,实际使用得需要扩展信息-x得到svctm一项,反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了。
svctm:          平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:          一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
              如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
avgqu-sz:     平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。

浅显易懂的解释:
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。


实践发现dm-0 / dm-3 卡住了,产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,也可能是坏了,
第一个iostat 报告会打印出系统最后一次启动后的统计信息,这也就是说,在多数情况下,第一个打印出来的信息应该被忽略,剩下的报告,都是基于上一次间隔的时间。举例子来说,这个命令会打印5次,第二次的报告是从第一次报告出来一个后的统计信息,第三次是基于第二次 ,依次类推:
iostat -x 2 5  # %util 出现100,设备是挂载的dm-0
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     2.00    0.00   0.00 100.00


#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。


svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘......。



步骤三)查找引起高I/O wait 对应的进程 ,iotop    #查找I/O wait 对应的进程


步骤四)查找哪个文件引起的I/Owait:
lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程。从这个列表中,我们可以找到具体是什么文件被写入,根据文件的大小和/proc中io文件的具体数据

我们可以使用-p <pid>的方式来减少输出,pid是具体的进程
lsof -p 1028

步骤四)更深入的确认这些文件被频繁的读写,我们可以通过如下命令来查看

[root@localhost ~]# df /tmp
文件系统               1K-块    已用     可用 已用% 挂载点
/dev/mapper/cl-root 17811456 3981928 13829528   23% /
  从上面的命令结果来看,我们可以确定/tmp 是我们环境的逻辑磁盘的根目录

复制代码
复制代码
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               4QfaOy-DNSO-niK1-ayn2-K6AY-WZMy-9Nd2It
复制代码
复制代码
  过pvdisplay我们能看到/dev/sda2其实就是我们用来创建逻辑磁盘的具体磁盘。通过以上的信息我们可以放心的说lsof的结果就是我们要查找的文件

cat /proc/18987/io
rchar: 58891582418
wchar: 58891579778
syscr: 46556085
syscw: 46556077
read_bytes: 212992
write_bytes: 59580235776
cancelled_write_bytes: 0

同时可以结合vmstat 查看查看b参数(等待资源的进程数),b有一个等待:
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  1      0 11119256 238876 205460    0    0     0     0    2    3  0  0 99  1  0


来自:https://www.cnblogs.com/happy-king/p/9234122.html
cat test.txt


sh test.txt
. test.txt


run:
sh test.txt
hello world


. test.txt  
hello world

即便test.txt没有可执行权限,也能够正常运行。

想一个自己的printf程序到底执行的是哪一个呢?
type -a printf
printf is a shell builtin
printf is /bin/printf
printf is /usr/bin/printf


更多来自:https://mp.weixin.qq.com/s/LdHHVsK9UsQ1mNLgA1pdSw
原理:应该是默认路由出口IP,它也就是能上网的default路由,发起公网请求的clientIP也就是要获取的服务器IP地址。



10.71.10.40


more:
echo $(python -c "
import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.connect(('i.api.weibo.com',0));print(s.getsockname())  
")
('10.71.10.40', 45847)


换成别的IP也一样能行:
分页: 4/40 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]