分类: 文章

  • Linux Cento 7 操作系统手动配置 IP 地址

    最近有台香港服务器被服务商更改了IP地址,但是无法访问服务器,通过 VNC 查看居然 IP 没有变更为新分配的 IP 地址,于是需要手动配置 IP、网关、掩码、DNS 等设置,这里做个记录。

    Linux Centos 7 操作系统手动配置 IP 地址

    设置静态 IP 地址

    查看网卡信息

    ip addr

    修改配置文件

    cd /etc/sysconfig/network-scripts/
    ls

    ls是查看当前目录,在该目录下找到你的网卡信息文件,使用 vim 进行编辑.

    # 修改之后的结果
    TYPE=Ethernet 
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static  # BOOTPROTO=dhcp 表示动态ip
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens160
    UUID=2679f5aa-405a-4114-a57b-3cd657824cec
    DEVICE=ens160  # 网卡名称
    ONBOOT=yes  # 需要修改,开机启动,激活设备,默认是关闭的
    IPADDR=192.168.8.211  # IP 地址
    NETMASK=255.255.255.0  # 子网掩码
    GATEWAY=192.168.8.254  # 网关
    DNS1=8.8.8.8
    DNS2=114.114.114.114

    重启网络服务

    systemctl restart network

    临时设置

    由于这台服务器没有安装 VIM,于是没办法,只能用另外一种办法。

    查看网络接口

    ifconfig 	# 查看当前活动状态的网络接口
    ifconfig eth0 	# 查看eth0网卡状态信息
    ifconfig -a 	# 即 ifconfig -all 查看所有启动禁用的网络接口
    ip a 	# 查看所有的网络接口信息

    启用、禁用网卡

    # 启用网卡
    ifconfig eth0 up
    ifup eth0
    # 禁用网卡 
    ifconfig eth0 down
    ifdown eth0

    临时配置 IP 地址

    ifconfig eth0 192.168.1.163  netmask  255.255.255.0 up # IP 子网掩码
    ifconfig eth0 192.168.1.163/24  # 设置 ip 
    ifconfig eth0 192.168.1.163  # 设置 ip 
    route add default gw 192.168.1.1  # 设置网关

    设置 DNS 地址

    echo "nameserver 8.8.8.8" >> /etc/resolv.conf
    echo "nameserver 114.114.114.114" >> /etc/resolv.conf

    重启网络服务

    systemctl restart network
  • EPSON打印机如何清洗你知道吗?

    喷墨打印的打印头在工作完成后没有归位进行保护,或是很长时间不用,都会导致喷嘴堵塞甚至完全不能打印的情况。喷墨打印机的打印头堵塞、清洗是个有点复杂的过程,我们针对不同情况不同产品需要分别对待。这篇文章介绍的是EPSON打印机如何清洗

      首先来说说爱普生的产品,因为爱普生的产品,使用的是微压电技术,喷头是固化在打印机内部,清洗只能通过程序完成,如果想拆开机器清洗,势必是要失去打印机的原厂保修,得不偿失,并且即便使用专门的清洁剂和超声波发生器,也未必就一定能洗干净。在淘宝上有很多卖清洁剂的,都号称能洗干净无腐蚀 ,但是有谁证明过吗?并且打印头是一个相当精密且娇贵的部件,在拆卸清洗过程中,难免会产生碰撞导致损坏,哪怕碰撞是很轻微的。如果在用下面的办法清洗之后还是堵的厉害,最佳的解决办法就是联系当地爱普生的售后服务部门,看看更换一个新的打印头要多少钱,这样才能确保新打印头的安装精度。

      在控制面板当中,找到打印机,这里要点击的,是打印首选项,而不是打印机属性或是属性。

     EPSON打印机如何清洗

      这时候,点击应用工具选项卡,先执行左上的喷嘴检查,这时候打印机会打印一张纸,上面是倾斜的网状图,可以很容易的看到是否有断线、残缺的地方,如果有,就需要进行喷嘴清洗,也就是左上第二个按钮。

      EPSON打印机如何清洗

      执行完一次清洗后,就要打印一张喷嘴检查图案,看看是否有改进、是否所有线条都完整了。要注意的是,这个过程非常耗墨水,所以要保证在清洗过程中墨水的余量足够。

      佳能 与惠普的打印机,墨盒 都有两种类型,一种是自带打印头的,一种不带。如下图,左边的是佳能的826墨盒,可以看到没有打印头,而右边的841墨盒是带打印头的。

     EPSON打印机如何清洗

      如果墨盒自带打印头,完全可以像前面那样进行清洗。看看清洗的效果,如果看不到效果,这种一体式产品好处在于更换墨盒后,会有新的打印头。

     EPSON打印机如何清洗

      如果是右边的打印头和墨盒分离的产品,解决办法是先尝试用软件 自带的工具清洗,看看效果。如果清洗之后还是堵塞,则可以死马当作活马医,尝试一下超声波清洗机。这时候可以把打印头拆下来,这个过程并不难,上图就是惠普的打印头。具体的清洗溶剂,需要看墨水的类型。在佳能、惠普的官网上,都在打印机产品介绍的网页上看到产品所采用的耗材到底是染料的还是颜料的。如果是全染料产品的打印机,可以把打印头拆下来,在超声波清洗机里面加上无水酒精来清洁。颜料墨水的产品,则需要去买专门的清洗溶剂,然后再看看成果。但是要指出的是,佳能和惠普的产品都是热气泡的技术,喷嘴很小,难保这些清洗用的溶剂是否有腐蚀 性。并且溶剂对于打印头之外的其他塑料部件是否有损害也未知。

      EPSON打印机如何清洗

      之所以可以尝试用超声波清洗机去清洗可更换的打印头,是因为佳能、惠普现在很多产品虽然方便更换独立打印头,但是独立的打印头并不便宜,可以尝试一下超声波清洗,即便是最坏的结果,打印头坏掉也不可惜,因为它本身已经被判了死刑,超声波清洗只是看看是否有奇迹。

      打印头喷嘴清洗,是一种亡羊补牢的工作。值得赞扬的是良好的喷墨打印机 使用习惯。对于气候干燥或是湿润程度不同,笔者这里建议用户在购买喷墨打印机之后,不要将其束之高阁,而是每隔两三天就打印一张喷嘴检查测试的图案,确保喷嘴不被堵塞。尤其是现在喷墨打印机产品原厂墨水价格都在下降的大环境下,更能看出维护打印头的必要性。

  • 解决新安装Docker安装完成运行报错

    服务器新完成Docker安装后,拉取了系统镜像,但是运行 docker-compose up -d 时候出现报错。我安装的是Instantbox准备建一个liunx的测试机器,来深入了解Liunx。下面来说一下我的解决方法。

    报错信息如下:

    docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
    
    See docker run --help.

    1、可能是Docker没有启用 运行以下命令来开启Docker

    sudo systemctl  start docker

    2、也可以运行以下命令来激活Docker,来运行第一个实例 hollo word 检验

    systemctl daemon-reload
    sudo service docker restart
    sudo service docker status
    sudo docker run hello-world

    3、compose以守护进程模式运行

    docker-compose up -d

    4、检查运行情况

    docker-compose ps

  • 完美解决Cloudreve安装完成后域名访问首页空白

    完美解决Cloudreve安装完成后域名访问首页空白,首先出现错误的环境为Linux, Centos,软件包64位,自己编译的,非使用宝塔面板,按照Cloudreve配置完后,我发现使用授权的域名访问,首页显示空白,打开控制台查看,发现是静态文件等无法访问,明明配置了反代规则,为什么不行呢?

    反代规则

    1. location / {
    2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    3. proxy_set_header Host $http_host;
    4. proxy_redirect off;
    5. proxy_pass http://81.68.66.128;
    6. }

    其实原因很简单,那就是此规则和自编译的Nginx产生的规则冲突,将Nginx默认生成的其他location规则全部删除,仅仅留下上面的规则,重启Nginx和Cloudreve即可!

  • QQ超级会员动态群头衔火花

    这个福利是只有超级会员用户专享的,普通用户是不能设置的,虽然没有特别大用处,也只是为了好看,可以设置群聊的动态火花和群头衔样式。

    把后缀修改为群号然后手机QQ打开即可设置

    https://club.vip.qq.com/interact/group/seticon?from=aio&_wv=2&gc=修改我为群号

  • CentOS 7部署FRP服务,实现内网穿透

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

    如果您用过类似花生壳的服务,对FRP这个名词可能不陌生,FRP可实现公网穿透到内网,即使您内网机器不支持公网IP也可以实现。不过花生壳之类的服务通常是限制流量或者需要额外付费,并且存在一定安全风险。如果您自己有VPS也可以轻松搭建FRP,此处分享的是一个来自Github上的开源项目,这篇文章以CentOS 7 X64为例。

    前提说明

    FRP分服务端和客户端两部分组成,接下来我们这篇文章需要实现的目的就是穿透到内网来连接Windows PC,在开始之前先看下FRP结构图。

    安装FRP Server

    作者已经提供了编译好的二进制包,下载解压 - 然后修改配置文件即可。

    #下载server端
    wget https://github.com/fatedier/frp/releases/download/v0.25.0/frp_0.25.0_linux_amd64.tar.gz
    #解压
    tar -zxvf frp_0.25.0_linux_amd64.tar.gz
    #进入目录
    cd frp_0.25.0_linux_amd64
    Bash

    解压后我们会看到里面有好几个文件,Server端我们只需要下面2个

    -rwxrwxr-x 1 mysql mysql 11026848 Mar 11 17:15 frps
    -rw-rw-r-- 1 mysql mysql       26 Mar 11 17:19 frps.ini

    继续编辑frps.ini这个文件,写入以下内容:

    [common]
    bind_port = 7000
    
    [mstsc]
    listen_port = 3389
    auth_token = 123456
    Bash
    • bind_port: 主服务需要监听的端口,这里使用7000
    • listen_port : 需要转发的端口,这里使用3389
    • auth_token: 相当于验证密码,这里使用123456,也可以不填写

    配置文件完成后输入命令./frps -c ./frps.ini 启动服务端,当然也别忘记在防火墙放行端口哦。如果需要服务在后台运行,可以将命令替换为:nohup ./frps -c ./frps.ini &

    #iptables放行端口
    iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
    iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
    service iptables save
    #firewalld放行端口
    firewall-cmd --zone=public --add-port=7000/tcp --permanent
    firewall-cmd --zone=public --add-port=3389/tcp --permanent
    firewall-cmd --reload
    Bash

    安装Windows 客户端

    上面已提到FRP分服务端和客户端,上面的步骤已经完成服务端安装,接下来我们在Windows上安装客户端。

    解压之后我们需要下面2个文件

    frpc.exe
    frpc.ini

    修改配置文件frpc.ini内容如下:

    [common]
    server_addr = 1.1.1.1
    server_port = 7000
    
    [mstsc]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389
    remote_port = 3389
    auth_token = 123456
    Bash
    • server_addr: 为服务器公网IP
    • server_port: FRP主服务监听的端口
    • local_ip: 本地电脑IP
    • local_port: 本地电脑监听的端口(Windows远程桌面服务默认监听3389)
    • remote_port: Server端需要转发的端口
    • auth_token: 验证密码,上个步骤我们设置的123456

    cmd窗口下进入FRP客户端目录,然后执行命令frpc.exe -c frpc.ini,如果不报错,那么客户端也正常运行了。假如您服务器IP是1.1.1.1,当您连接1.1.1.1:3389时,就可以映射到内网的127.0.0.1:3389,从而实现内网穿透。

    总结

    上面的方法适合本地申请不到公网IP的童鞋,如果本地已经有公网IP,直接使用光猫或路由器的端口映射 功能即可。上面的工作只是转发了TCP流量,FRP的用途远不止这些,如果有兴趣可以自行深入研究。

  • 在网址加上wenrun发现新大陆

    发现个非常实用的网站,在网址前加上一段神奇的命令,居然发现了新大陆。

    在你当前浏览的网站的网址最前面加上wn.run/ (wn万能的缩写)后回车,

    看看有没有什么神奇的变化呢? 是不是出现了一系列神奇的工具?

    正巧小编在浏览某度文库,在网址前添加wn.run/ 后,居然可以下载文库的文件。

    接着我又试了下几个常用的网站,看看究竟都有什么功能?

    淘宝网,京东等添加wn.run/

    以后商品页面直接显示商品的历史价格,方便购物党比价。

    某狗,某易云音乐等添加wn.run/

    以后直接显示当前音乐的真实下载地址,管你是不是VIP,统统下。

    某奇艺,某讯,某bili等添加wn.run/

    以后显示视频下载地址和某些付费特殊视频解锁,居然比VIP还屌。

    某度文库,某丁文库等添加wn.run/

    以后可以免积分直接下载当前的文档源文件,源文件,源文件。

    其他网站 添加wn.run/

    以后可以将网页存为PDF,一键翻译,查看历史记录,一键截图,查看支持的油猴脚本等。

    这个命令非常强大,在你正在浏览的网站前加上它,看看有没有什么惊喜呢!注意最后有一个 / 哦!

  • 三周养成高效易瘦体质训练营易丨瘦体质养成法

    三周养成高效易瘦体质训练营易丨瘦体质养成法

    课程介绍:

    体重管理不只是少吃多运动,怎么用饮食养成易瘦体质,怎么不运动还减脂,通过对体能训练,膳食方案的调整,帮助你管理精力,怎么运动让你的状态越来越好,在三周内养成易瘦体质,怎么睡出好精力,更好的进行精力管理,能够在减重的同时,保持充沛的精力。

    相关文件下载地址
    下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

  • Linux服务器性能分析之CPU利用率

    1. 指标范围

    1.1 User mode CPU utilization+ System mode CPU utilization

    合理值:60-85%,如果在一个多用户系统中us+sy时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害;us过大,说明有用户进程占用很多cpu时间,需要进一步的分析其它软硬件因素;sy过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈,需要进一步分析其它软硬件因素。

    1.2 Wa(wait)

    参考值:小于25%,超过25%的wa的值可以表示子系统可能没有被正确平衡,也可能是磁盘密集工作负载的结果,系统的磁盘或其它I/o可能有问题,可以通过iostat/SAR –C命令进一步分解分析

    1.3 Id(idle)

    参考值:大于40,如果r经常大于4,且id经常小于40,表示cpu的负荷很重

    1.4 r

    参考值:小于4,队列大于4时,表明系统的cpu或内存可能有问题,如果r经常大于4,且id经常少于40,表示cpu的负荷很重。当队列变长时,队列中进程在等待cpu调度执行时所花的时间会变长

    1.5 判断cpu瓶颈的方法

    很慢的响应时间(slow response time)

    Cpu的空闲时间为零(zero percent idle cpu)

    过高的用户占用cpu时间(high percent user cpu)

    过高的系统占用cpu时间(high percent system cpu)

    长时间的有很长的运行进程队列(large run queue size sustained over time)

    2. 如何查看cpu利用率

    2.1 使用top命令查看

    数据来自/proc/stat文件

    %us=(Usertime+Nicetime)/CPU时间*100%

    %sy=(Systemtime+Hardirqtime+Softirqtime)/CPU时间*100%

    %id=(Idletime)/CPU时间*100%

    %ni=(Nicetime)/CPU时间*100%

    %wa=(Waitingtime)/CPU时间*100%

    %hi=(Hardirqtime)/CPU时间*100%

    %si=(Softirqtime)/CPU时间*100%

    %st=(Stealtime)/CPU时间*100%

    备注: top 命令默认情况下,是每 3 秒刷新一次。也可以通过 top -d <刷新时间间隔> 来指定刷新频率,如top -d 0.1 或top -d 0.01 等。top 执行时,也可以按“s ”键,修改时间间隔。

    2.2 使用vmstat查看

    r表示运行队列的大小,b表示由于IO等待而的线程数量,in表示中断的数量,cs表示上下文切换的数量。

    2.3 其它查看方式

    Iostat、sar -q、sar –u等

    3. CPU介绍

    3.1 内核中的时间

    HZ是系统时钟在一秒内固定发出时钟中断的次数。HZ在编译内核前是可以进行配置的,因此通过下述命令就可以查看当前系统的时钟中断频率:cat /boot/config-`uname -r` | grep CONFIG_HZ

    tick为系统时钟每“滴答“一次的时间,其值为(1/HZ)秒。也就是连续两次时钟中断之间的时间间隔。

    jiffies用来计算自系统启动以来tick的次数,也就是说系统时钟每产生一次时钟中断,该变量的值就增加一次。

    3.2 CPU时间组成

    CPU的工作时间由三部分组成:用户态时间、系统态时间和空闲态时间。具体的组成为:

    CPU时间包含User time、System time、Nice time、Idle time、Waiting time、Hardirq time、Softirq time、Steal time

    空闲态时间==idle time

    用户态时间==user time+ Nice time。

    内核态时间==system time+ Hardirq time+ Softirq time。

    user time。指CPU在用户态执行进程的时间。

    system time。指CPU在内核运行的时间。

    nice time。指系统花费在调整进程优先级上的时间。

    idle time。系统处于空闲期,等待进程运行。

    waiting time。指CPU花费在等待I/O操作上的总时间,与ed相似。

    steal time。指当前CPU被强制(involuntary wait )等待另外虚拟的CPU处理完毕时花费的时间,此时 hypervisor 在为另一个虚拟处理器服务。

    Softirq time 、Hardirq time。分别对应系统在处理软硬中断时候所花费的CPU时间。

    3.3 User mode CPU utilization

    %usr。显示了用户方式下所花费CPU时间的百分比,用户使用CPU的进程包括:cpu运行常规用户进程,cpu运行niced process,cpu运行实时进程。一个进程可以在用户方式下执行,也可以在系统(内核)方式下执行,当一个进程在内核代码中运行时,我们称其处于内核态;当一个进程正在执行用户自己的代码时,我们称其处于用户态,在用户方式下执行时,进程在它自己的应用代码中执行,不需要内核资源来进行计算、管理内存或设置变量

    3.4 System mode CPU utilization

    显示了系统方式下所花费cpu时间的百分比,包括内核进程(kprocs)和其他需要访问内核资源的进程所消耗的cpu资源,系统使用cpu的进程包括:用于系统调用,用于I/O管理(中断和驱动),用于内存管理(paging and swapping),用于进程管理(context switch and process start),如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。

    3.5 %wa(wait)

    显示了暂挂本地磁盘I/O和NFS加载的磁盘的cpu空闲百分比,是由于进程等待I/O而使cpu处于空闲状态的比率,I/O主要包括: I/O,raw I/O,VM-paging/swapins。如果在wait运行时至少有一个未完成的磁盘I/O,该事件就归为I/O等待时间,对磁盘的I/O请求会导致调用的进程阻塞(或睡眠),直到请求完成为止,一旦进程的I/O请求完成,该进程就放入运行队列中。如果I/O很快完成,该进程可以使用更多的cpu时间。

    3.6 %id(idle)

    除了上面的WIO以外的空闲情况,显示了没有本地I/O时cpu空闲或等待的时间百分比。如果没有线程可以执行(运行队列为空),系统分派一个叫做wait的线程,可称为idle kproc。如果ps报告显示这个线程的总计时间较高,这表明存在时间段,其中没有其它线程准备在cpu上运行或等待执行。系统因此大部分时间空闲或等待新任务。

    3.7 r(runq-sz)

    运行进程队列的长度。对于可运行状态的进程个数的大小,这些进程在内存中准备就绪

    4. 概念介绍

    4.1 用户模式+内核模式

    一般说来,一个进程在CPU上运行可以有两种运行模式,既可在用户模式下运行,又可在内核模式下运行(即进程分别工作在用户态和内核态,在内核态工作仍旧是这个进程,除非进行了进程的切换)。通常操作系统把虚拟地址空间划分为用户空间和内核空间,例如x86平台的Linux系统虚拟地址空间是0x00000000~0xffffffff,前3GB(0x00000000~0xbfffffff)是用户空间,后1GB(0xc0000000~0xffffffff)是内核空间。用户加载到用户空间,在用户模式下执行,不能访问内核中的数据,也不能跳转到内核代码中执行。这样可以保护内核,如果一个进程访问了非法地址,顶多这一个进程崩溃,而不会影响到内核和整个系统的稳定性。

    Cpu在产生中断或异常时不仅会跳转到中断或异常服务城西,还会自动切换模式,从用户模式切换到特权模式,因此从中断或异常程序可以跳转到内核代码中执行。事实上,整个内核就是由各种中断和异常处理程序组成的。即,正常情况下处理器在用户模式执行用户程序,在中断或异常情况下处理器切换到特权模式执行内核程序,处理完中断或异常之后再返回用户模式继续执行用户程序,例如,用户进程A调用了内核系统调用来获取当前的时钟滴答数,在执行用户进程A中的系统调用指令时会保存当前用户进程的IP,CS等当前状态,然后再跳转到内核空间(即内核代码区域)去执行像应的系统调用函数,获取当前的时钟滴答数。执行完后再通过IRET指令返回到进程A中(就是将进入时保存的信息再复位到相应的寄存器中),再接着从CS:EIP地址开始执行A进程的指令。

    进程在创建的时候除了创建进程的控制块之外,在内核里还创建了进程的内核栈,进程通过系统调用(例如fopen()或者open())进入内核后,此时处理器处于特权级最高的(0级)内核代码中执行,当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,是指向在进程的上下文上的,

    内核模式的权限高于用户模式的权限。

    用户级。系统用户可以与进行交互操作,如运行应用和系统命令,用户级通过系统调用接口访问内核级;内核级。操作系统自动运行一些功能,它们主要对硬件进行操作

    4.2 进程调度

    任何进程要想占有CPU,从而真正处于执行状态,就必须经由进程调度。进程调度机制主要涉及到调度方式、调度时机和调度策略。

    1. 调度方式

    Linux内核的调度方式基本上采用“抢占式优先级”方式,即当进程在用户模式下运行时,不管是否自愿,在一定条件下(如时间片用完或等待I/O),核心就可以暂时剥夺其运行而调度其它进程进入运行。但是,一旦进程切换到内核模式下运行,就不受以上限制而一直运行下去,直至又回到用户模式之前才会发生进程调度。

    Linux系统中的调度策略基本上继承了Unix的以优先级为基础的调度。就是说,核心为系统中每个进程计算出一个优先权,该优先权反映了一个进程获得CPU使用权的资格,即高优先权的进程优先得到运行。核心从进程就绪队列中挑选一个优先权最高的进程,为其分配一个CPU时间片,令其投入运行。在运行过程中,当前进程的优先权随时间递减,这样就实现了“负反馈”作用:经过一段时间之后,原来级别较低的进程就相对“提升”了级别,从而有机会得到运行。当所有进程的优先权都变为0时,就重新计算一次所有进程的优先权。

    2. 调度策略

    Linux系统针对不同类别的进程提供了三种不同的调度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。

    SCHED_FIFO适合于实时进程,它们对时间性要求比较强,而每次运行所需的时间比较短,一旦这种进程被调度开始运行后,就要一直运行到自愿让出CPU,或者被优先权更高的进程抢占其执行权为止。

    SCHED_RR对应“时间片轮转法”,适合于每次运行需要较长时间的实时进程。一个运行进程分配一个时间片(如200毫秒),当时间片用完后,CPU被另外进程抢占,而该进程被送回相同优先级队列的末尾。SCHED_OTHER是传统的Unix调度策略,适合于交互式的分时进程。这类进程的优先权取决于两个因素,一个因素是进程剩余时间配额,如果进程用完了配给的时间,则相应优先权为0;另一个是进程的优先数nice,这是从Unix系统沿袭下来的方法,优先数越小,其优先级越高。

    nice的取值范围是19-20。用户可以利用nice命令设定进程的nice值。但一般用户只能设定正值,从而主动降低其优先级;只有特权用户才能把nice的值置为负数。进程的优先权就是以上二者之和。核心动态调整用户态进程的优先级。这样,一个进程从创建到完成任务后终止,需要经历多次反馈循环。当进程再次被调度运行时,它就从上次断点处开始继续执行。对于实时进程,其优先权的值是(1000+设定的正值),因此,至少是1000。所以,实时进程的优先权高于其它类型进程的优先权。另外,时间配额及nice值与实时进程的优先权无关。如果系统中有实时进程处于就绪状态,则非实时进程就不能被调度运行,直至所有实时进程都完成了,非实时进程才有机会占用CPU。

    后台命令(在命令末尾有&符号,如gcc f1.c& )对应后台进程(又称后台作业),后台进程的优先级低于任何交互(前台)进程的优先级。所以,只有当系统中当前不存在可运行的交互进程时,才调度后台进程运行。后台进程往往按批处理方式调度运行。

    3. 调度时机

    核心进行进程调度的时机有以下几种情况:

    (1)当前进程调用系统调用nanosleep( )或pause( )使自己进入睡眠状态,主动让出一段时间的CPU使用权;

    (2)进程终止,永久地放弃对CPU的使用;

    (3)在时钟中断处理程序执行过程中,发现当前进程连续运行的时间过长;

    (4)当唤醒一个睡眠进程时,发现被唤醒的进程比当前进程更有资格运行;

    (5)一个进程通过执行系统调用来改变调度策略或降低自身的优先权(如nice命令),从而引起立即调度。

    4. 调度算法

    进程调度的算法应该比较简单,以便减少频繁调度时的系统开销。Linux执行进程调度时,首先查找所有在就绪队列中的进程,从中选出优先级最高且在内存的一个进程。如果队列中有实时进程,那么实时进程将优先运行。如果最需要运行的进程不是当前进程,那么当前进程就被挂起,并且保存它的现场所涉及的一切机器状态,包括计数器和CPU寄存器等,然后为选中的进程恢复运行现场。

    4.3 用户级线程与内核级线程

    在许多类Unix系统中,如Linux、FreeBSD、Solaris等,进程一直都是操作系统内核调用的最小单位,也都采用多进程模型。后来引入了线程概念,有以下两种概念的线程:

    用户级线程(User-Level Thread,ULT)。由应用进程利用线程库创建和管理,不在内核中实现线程,只在用户态中模拟出多线程,不依赖于核心,操作系统内核完全不知道多线程的存在。

    内核线线程(Kernel-Level Thread,KLT),又称为内核支持的线程或轻量级进程。是在核心空间实现的,内核为每个线程在核心空间中设置了一个线程控制块,用来登记该线程的线程标识符、值、状态、优先级等信息,所有对线程的操作,如创建、撤销和切换都是通过系统功能调用由内核中的相应处理完成,内核维护进程及线程的上下文切换以及线程切换,类系统中一般通过修改进程的实现方式来实现,可以使用不完全的进程创建方式创建共享数据空间的进程,在 Linux下这种系统调用为clone(),而在FreeBSD下它为rfork()。

    5. 常见误区

    5.1 Cpu利用率很高就是cpu资源不够

    出现cpu计数器不在范围时,不一定是由于cpu资源不够,因为其他资源的也会引起,例如内存不够时,cpu会忙内存管理的事,表面上可能是cpu的利用为100%

  • linux宝塔BT php72 安装pdo-qlrv扩展

    第一步、加入微软的源

    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
    PHP

    第二步、安装驱动

    yum install msodbcsql mssql-tools unixODBC-devel
    PHP

    第三步、下载pdo_sqlsrv扩展包 http://pecl.php.net/package/pdo_sqlsrv

    我这里的php版本是php 7.2 所以选择安装

    wget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz
    PHP

    php版本是php 7.3及以上可以选择 pdo_sqlsrv-5.6.0.tgz

    第四步、解压下载的扩展包

    tar -zxvf pdo_sqlsrv-5.3.0.tgz
    cd pdo_sqlsrv-5.3.0
    PHP

    第五步、开始编译(这里需要注意你的php路径)

    /www/server/php/72/bin/phpize
    ./configure --with-php-config=/www/server/php/72/bin/php-config
    make && make install
    PHP

    第六步、加入扩展

    echo "extension = pdo_sqlsrv.so" >> /www/server/php/72/etc/php.ini
    /etc/init.d/php-fpm-72 reload
    PHP

    第七步、最后检查扩展是否安装成功

    /www/server/php/72/bin/php -m|grep -i  sqlsrv
    PHP

    类是下面图片显示的,就说明你安装成功了

    linux宝塔BT php7.2 安装pdo-sqlsrv扩展