undefined

符号链接级别过多错误

ln 的手册为 ln [option]... TARGET LINK_NAME

可以这么理解,我们正在创建一个到 TARGET 的符号链接,我们将其称为 LINK_NAME

如下演示符号链接级别过多的错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 如下,我们有这样的目录结构
# tree --noreport -fp
.
└── [drwxrwxr-x] ./topdir
├── [drwxrwxr-x] ./topdir/outputdir
└── [drwxrwxr-x] ./topdir/source

2. 创建一个符号链接,并期望创建的 outputdir 符号链接指向 source 目录
cd /topdir
ln -s source outputdir
# tree --noreport -fp
.
├── [drwxrwxr-x] ./outputdir
│   └── [lrwxrwxrwx] ./outputdir/source -> source
└── [drwxrwxr-x] ./source

3. 符号链接创建了,但是实际上是损坏的
find -L -xtype l
find: ‘./outputdir/source’: Too many levels of symbolic links

查看更多

undefined

研究OOM

理解OOM机制: https://www.zhihu.com/question/21972130


oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存。通常oom_killer的触发流程是:

进程A想要分配物理内存(通常是当进程真正去读写一块内核已经“分配”给它的内存)->触发缺页异常->内核去分配物理内存->物理内存不够了,触发OOM

功能:当一个进程拿内核已经分配给自己的内存时,系统发现没有物理内存了。于是各处去找,找不到那就找一个最合适的进程删掉,释放些内存,如果找不到这个进程,那么系统自杀。

查看更多

undefined

1. pthread_once 详解

1
2
int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));
功能:本函数使用初值为 PTHREAD_ONCE_INIT 的 once_control 变量保证 init_routine() 函数在本进程执行序列中仅执行一次。

Linux Threads使用互斥锁和条件变量保证由pthread_once()指定的函数执行且仅执行一次,而once_control表示是否执行过。

如果once_control的初值不是PTHREAD_ONCE_INIT(Linux Threads定义为0),pthread_once() 的行为就会不正常。

在LinuxThreads中,实际”一次性函数”的执行状态有三种:NEVER(0)、IN_PROGRESS(1)、DONE(2),如果once初值设为1,则由于所有pthread_once()都必须等待其中一个激发”已执行一次”信号,因此所有pthread_once ()都会陷入永久的等待中;如果设为2,则表示该函数已执行过一次,从而所有pthread_once()都会立即返回0。

查看更多

undefined

通过free 命令理解linux 内存管理

简介

linux 下面查看内存状态可以使用 free 命令,但是如果不了解 linux 内存管理机制的话,对输出也会摸不着头脑,这篇文章就说明一下各个数据的意思。

下面是我电脑上虚拟机,直接使用 free 命令的数据结果。

vagrant@precise64:~$ free              total       used       free     shared    buffers     cached Mem:        374256     330952      43304          0      14400     238128 -/+ buffers/cache:      78424     295832 Swap:       786428       2224     784204

所有的数据默认都是 KB,第一行有六个值:

查看更多