[实践OK]Linux下 php环境安装、配置composer,使用composer安装laravel/lumen、zan等框架,写一个读取数据库的。
Php/Js/Shell/Go jackx 2017-1-10 23:17
/usr/bin/env: PHP: No such file or directory报错
su www
[root@VM-0-15-centos ~]# curl -sS https://getcomposer.org/installer | php
#把composer.phar转移之bin目录以便全局使用
[root@VM-0-15-centos ~]# mv composer.phar /usr/local/bin/composer
#展示版本信息说明成功
[root@VM-0-15-centos ~]# composer -v
如果出现这个提示,是因为composer不建议root账号运行,可以输入y,或者切换账号
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
sudo -u www -H/usr/local/composer/bin/composer config repo.packagist composer https://mirrors.aliyun.com/composer/
[ErrorException]
touch(): Unable to create file /home/www/.config/composer/config.json because No such file or directory
#composer clear-cache
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Cache directory does not exist (cache-vcs-dir):
Cache directory does not exist (cache-repo-dir):
Cache directory does not exist (cache-files-dir):
Clearing cache (cache-dir): /root/.cache/composer
如果是其它用户就是在它的家目录下面建立配置文件。
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
Loading composer repositories with package information
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
......
Package operations: 41 installs, 14 updates, 38 removals
Failed to download dragonmantank/cron-expression from dist: The zip extension is missing and unzip/7z commands cannot be called as proc_open is disabled, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
Now trying to download from source
PHP的一些安全函数禁用了,打开就成功了:
- Upgrading easyswoole/task (1.0.5 => 1.1.2): Extracting archive
- Upgrading easyswoole/log (1.0.3 => 1.1.1): Extracting archive
Generating autoload files
28 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
然后执行compser up
或者备份composer.lock
==========================================================================
composer config -g repo.packagist composer https://packagist.phpcomposer.com #换国内镜像URL地址。
composer是一个可执行命令,你在一个空目录下写一个composer.json
然后执行composer update,就能生成。
====================两步:软链接composer/PATH/下载autoloader===========================
软链接加PATH:
easy swoole 3.0.9 官方并不是最新的,换换阿里云镜像:
全局替换:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer clear-cache # 此步奏选泽性操作,清除所有 package 缓存。
composer clear-cache
Cache directory does not exist (cache-vcs-dir):
Clearing cache (cache-repo-dir): /data/www/.cache/composer/repo
Clearing cache (cache-files-dir): /data/www/.cache/composer/files
Clearing cache (cache-dir): /data/www/.cache/composer
当前项目替换: (注意:不让root用户运行,用www用户)
cd 项目目录
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
不重新开终端不会生效,则可直接导入变量:
source /etc/profile.d/composer.sh
cd /usr/local/kafka-php
cat composer.json
{
"require": {
"nmred/kafka-php": "0.2.*"
}
}
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing amphp/amp (v1.2.2): Downloading (100%)
- Installing psr/log (1.0.2): Downloading (100%)
- Installing nmred/kafka-php (v0.2.0.8): Downloading (100%)
Writing lock file
Generating autoload files
cd /usr/local/kafka-php
composer.json composer.lock vendor
目的是看下同事所说的Kafka死光了,kafka-php会退出的问题:
https://github.com/weiboad/kafka-php
===========================================================================
cd /usr/local/composer ,sudo -u www -H composer.phar install ,会去读取:/usr/local/composer/composer.json文件。
chown -R www.www /data/htdocs/sd.levoo.com #否则会报:/data/htdocs/sd.levoo.com/vendor does not exist and could not be created.
sudo -u www -H composer.phar install
实践如下:
vi /etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/composer:/usr/local/php/bin
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
[ErrorException]
touch(): Unable to create file /home/www/.composer/config.json because No such file or directory
#mkdir /home/www
#chown www.www /home/www
#chmod 755 /home/www
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/composer
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
建立composer.json如下,可以根据需要添加你所依赖的库,但下面一定得包含在内,autoload必须要指定app和test的目录不得省略。
{
"require": {
"tmtbe/swooledistributed":">2.0.0"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
/usr/local/composer/composer.json
运行:
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
[RuntimeException]
/usr/local/composer/vendor does not exist and could not be created.
[RuntimeException]
/usr/local/composer/vendor/symfony/intl does not exist and could not be created
- Installing symfony/intl (v3.3.8):
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
PHP需有proc_open,得从PHP的php.ini里给去掉:
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_
restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/php/etc
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
得cd到:/usr/local/composer 里,再执行:sudo -u www -H composer.phar install
#sudo -u www -H composer.phar install
[ErrorException]
proc_get_status() has been disabled for security reasons 和上面一样:得从PHP的php.ini里给去掉。
[RuntimeException]
Could not delete /usr/local/composer/vendor/symfony/intl:
chown -R www.www /usr/local/composer/vendor
[ErrorException]
file_put_contents(./composer.lock): failed to open stream: Permission denied #写入/usr/local/composer/composer.lock权限不够。
[root@gitlab-jenkins_php-redis_123.57.252.183:/usr/local]
#chown www.www composer
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
From:https://getcomposer.org/download/
http://blog.csdn.net/yoywow/article/details/52074512
二、使用composer安装laravel/lumen:
遇到问题:
修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
[root@a composer]# chtdocs
[root@a htdocs]# cd lumen.levoo.com/
[root@a lumen.levoo.com]# /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /root/.config/composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
compser 执行命令提示do not run composer as root/super !
这个是因为composer为了防止非法脚本在root下执行,解决办法随便切换到非root用户即可
su www
mkdir -p /home/www/.cache
chown -R www:www /home/www/.cache
composer require easyswoole/hot-reload
Cannot create cache directory /home/www/.cache/composer/repo/https---mirrors.aliyun.com-composer/, or directory is not writable. Proceeding without cache
Cannot create cache directory /home/www/.cache/composer/files/, or directory is not writable. Proceeding without cache
Using version ^0.1.2 for easyswoole/hot-reload
./composer.json has been updated
PATH变量设置Ok的方法如下:
打开~/.bashrc
sudo vim ~/.bashrc
添加行:
export PATH=$PATH:/home/lumen/.config/composer/vendor/bin
用Linux系统。比如要把/etc/apache/bin目录添加到PATH中,方法有三:
1.#PATH=c/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)
这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去
这种方法是针对用户起作用的
From:http://opsmysql.blog.51cto.com/2238445/665990
lumen没有成功:
useradd lumen
su lumen
cd /data/htdocs/laravel.levoo.com
/usr/local/composer/composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
进行上述设置后,laravel有门,能下载了:
[lumen@a laravel.levoo.com]$ pwd
/data/htdocs/laravel.levoo.com
[lumen@a laravel.levoo.com]$ /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /home/lumen/.config/composer
Using version ^1.0 for laravel/lumen-installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Installing symfony/process (v3.2.1) Downloading: 100%
- Installing psr/log (1.0.2) Downloading: 100%
- Installing symfony/debug (v3.2.1) Downloading: 100%
- Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
- Installing symfony/console (v3.2.1) Downloading: 100%
- Installing guzzlehttp/promises (v1.3.1) Downloading: 100%
- Installing psr/http-message (1.0.1) Downloading: 100%
- Installing guzzlehttp/psr7 (1.3.1) Downloading: 100%
- Installing guzzlehttp/guzzle (6.2.2) Downloading: 100%
- Installing laravel/lumen-installer (v1.0.2) Downloading: 100%
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/filesystem ()
Writing lock file
Generating autoload files
生成文件如下:
[lumen@a composer]$ pwd
/home/lumen/.config/composer
[lumen@a composer]$ ls /home/lumen/.config/composer
auth.json composer.json composer.lock config.json vendor
开始学习数据库:
http://blog.csdn.net/wowkk/article/details/52104689
/data/htdocs/lumen.levoo.com/blog/.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=mysql
DB_HOST=10.44.202.177
DB_PORT=3306
DB_DATABASE=levoo_egg
DB_USERNAME=levoo
DB_PASSWORD=new@levoo.com
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.PHP
/data/htdocs/lumen.levoo.com/blog/routes/web.php
<?php
$app->group(["namespace"=>"App\Http\Controllers"], function()use($app){
//账户控制器
$app->get("/AccountController",["uses" => "AccountController@accountController"]);
});
model:/data/htdocs/lumen.levoo.com/blog/app/Models/User.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}
在app/Http/Controllers目录下AccountController.php,修改为
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class AccountController extends BaseController
{
//直接传人sql方式操作数据库
function accountController(Request $request){
return User::all();
}
}
http://101.200.189.210/AccountController/accountController
su www
[root@VM-0-15-centos ~]# curl -sS https://getcomposer.org/installer | php
#把composer.phar转移之bin目录以便全局使用
[root@VM-0-15-centos ~]# mv composer.phar /usr/local/bin/composer
#展示版本信息说明成功
[root@VM-0-15-centos ~]# composer -v
如果出现这个提示,是因为composer不建议root账号运行,可以输入y,或者切换账号
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
sudo -u www -H/usr/local/composer/bin/composer config repo.packagist composer https://mirrors.aliyun.com/composer/
[ErrorException]
touch(): Unable to create file /home/www/.config/composer/config.json because No such file or directory
#composer clear-cache
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Cache directory does not exist (cache-vcs-dir):
Cache directory does not exist (cache-repo-dir):
Cache directory does not exist (cache-files-dir):
Clearing cache (cache-dir): /root/.cache/composer
如果是其它用户就是在它的家目录下面建立配置文件。
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
Loading composer repositories with package information
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
......
Package operations: 41 installs, 14 updates, 38 removals
Failed to download dragonmantank/cron-expression from dist: The zip extension is missing and unzip/7z commands cannot be called as proc_open is disabled, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
Now trying to download from source
PHP的一些安全函数禁用了,打开就成功了:
- Upgrading easyswoole/task (1.0.5 => 1.1.2): Extracting archive
- Upgrading easyswoole/log (1.0.3 => 1.1.1): Extracting archive
Generating autoload files
28 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
然后执行compser up
或者备份composer.lock
==========================================================================
composer config -g repo.packagist composer https://packagist.phpcomposer.com #换国内镜像URL地址。
composer是一个可执行命令,你在一个空目录下写一个composer.json
然后执行composer update,就能生成。
====================两步:软链接composer/PATH/下载autoloader===========================
软链接加PATH:
easy swoole 3.0.9 官方并不是最新的,换换阿里云镜像:
全局替换:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer clear-cache # 此步奏选泽性操作,清除所有 package 缓存。
composer clear-cache
Cache directory does not exist (cache-vcs-dir):
Clearing cache (cache-repo-dir): /data/www/.cache/composer/repo
Clearing cache (cache-files-dir): /data/www/.cache/composer/files
Clearing cache (cache-dir): /data/www/.cache/composer
当前项目替换: (注意:不让root用户运行,用www用户)
cd 项目目录
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
不重新开终端不会生效,则可直接导入变量:
source /etc/profile.d/composer.sh
cd /usr/local/kafka-php
cat composer.json
{
"require": {
"nmred/kafka-php": "0.2.*"
}
}
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing amphp/amp (v1.2.2): Downloading (100%)
- Installing psr/log (1.0.2): Downloading (100%)
- Installing nmred/kafka-php (v0.2.0.8): Downloading (100%)
Writing lock file
Generating autoload files
cd /usr/local/kafka-php
composer.json composer.lock vendor
目的是看下同事所说的Kafka死光了,kafka-php会退出的问题:
https://github.com/weiboad/kafka-php
===========================================================================
cd /usr/local/composer ,sudo -u www -H composer.phar install ,会去读取:/usr/local/composer/composer.json文件。
chown -R www.www /data/htdocs/sd.levoo.com #否则会报:/data/htdocs/sd.levoo.com/vendor does not exist and could not be created.
sudo -u www -H composer.phar install
实践如下:
vi /etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/composer:/usr/local/php/bin
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
[ErrorException]
touch(): Unable to create file /home/www/.composer/config.json because No such file or directory
#mkdir /home/www
#chown www.www /home/www
#chmod 755 /home/www
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/composer
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
建立composer.json如下,可以根据需要添加你所依赖的库,但下面一定得包含在内,autoload必须要指定app和test的目录不得省略。
{
"require": {
"tmtbe/swooledistributed":">2.0.0"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
/usr/local/composer/composer.json
运行:
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
[RuntimeException]
/usr/local/composer/vendor does not exist and could not be created.
[RuntimeException]
/usr/local/composer/vendor/symfony/intl does not exist and could not be created
- Installing symfony/intl (v3.3.8):
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
PHP需有proc_open,得从PHP的php.ini里给去掉:
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_
restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/php/etc
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
得cd到:/usr/local/composer 里,再执行:sudo -u www -H composer.phar install
#sudo -u www -H composer.phar install
[ErrorException]
proc_get_status() has been disabled for security reasons 和上面一样:得从PHP的php.ini里给去掉。
[RuntimeException]
Could not delete /usr/local/composer/vendor/symfony/intl:
chown -R www.www /usr/local/composer/vendor
[ErrorException]
file_put_contents(./composer.lock): failed to open stream: Permission denied #写入/usr/local/composer/composer.lock权限不够。
[root@gitlab-jenkins_php-redis_123.57.252.183:/usr/local]
#chown www.www composer
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
From:https://getcomposer.org/download/
http://blog.csdn.net/yoywow/article/details/52074512
二、使用composer安装laravel/lumen:
遇到问题:
修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
[root@a composer]# chtdocs
[root@a htdocs]# cd lumen.levoo.com/
[root@a lumen.levoo.com]# /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /root/.config/composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
compser 执行命令提示do not run composer as root/super !
这个是因为composer为了防止非法脚本在root下执行,解决办法随便切换到非root用户即可
su www
mkdir -p /home/www/.cache
chown -R www:www /home/www/.cache
composer require easyswoole/hot-reload
Cannot create cache directory /home/www/.cache/composer/repo/https---mirrors.aliyun.com-composer/, or directory is not writable. Proceeding without cache
Cannot create cache directory /home/www/.cache/composer/files/, or directory is not writable. Proceeding without cache
Using version ^0.1.2 for easyswoole/hot-reload
./composer.json has been updated
PATH变量设置Ok的方法如下:
打开~/.bashrc
sudo vim ~/.bashrc
添加行:
export PATH=$PATH:/home/lumen/.config/composer/vendor/bin
用Linux系统。比如要把/etc/apache/bin目录添加到PATH中,方法有三:
1.#PATH=c/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)
这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去
这种方法是针对用户起作用的
From:http://opsmysql.blog.51cto.com/2238445/665990
lumen没有成功:
useradd lumen
su lumen
cd /data/htdocs/laravel.levoo.com
/usr/local/composer/composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
进行上述设置后,laravel有门,能下载了:
[lumen@a laravel.levoo.com]$ pwd
/data/htdocs/laravel.levoo.com
[lumen@a laravel.levoo.com]$ /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /home/lumen/.config/composer
Using version ^1.0 for laravel/lumen-installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Installing symfony/process (v3.2.1) Downloading: 100%
- Installing psr/log (1.0.2) Downloading: 100%
- Installing symfony/debug (v3.2.1) Downloading: 100%
- Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
- Installing symfony/console (v3.2.1) Downloading: 100%
- Installing guzzlehttp/promises (v1.3.1) Downloading: 100%
- Installing psr/http-message (1.0.1) Downloading: 100%
- Installing guzzlehttp/psr7 (1.3.1) Downloading: 100%
- Installing guzzlehttp/guzzle (6.2.2) Downloading: 100%
- Installing laravel/lumen-installer (v1.0.2) Downloading: 100%
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/filesystem ()
Writing lock file
Generating autoload files
生成文件如下:
[lumen@a composer]$ pwd
/home/lumen/.config/composer
[lumen@a composer]$ ls /home/lumen/.config/composer
auth.json composer.json composer.lock config.json vendor
开始学习数据库:
http://blog.csdn.net/wowkk/article/details/52104689
/data/htdocs/lumen.levoo.com/blog/.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=mysql
DB_HOST=10.44.202.177
DB_PORT=3306
DB_DATABASE=levoo_egg
DB_USERNAME=levoo
DB_PASSWORD=new@levoo.com
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.PHP
/data/htdocs/lumen.levoo.com/blog/routes/web.php
<?php
$app->group(["namespace"=>"App\Http\Controllers"], function()use($app){
//账户控制器
$app->get("/AccountController",["uses" => "AccountController@accountController"]);
});
model:/data/htdocs/lumen.levoo.com/blog/app/Models/User.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}
在app/Http/Controllers目录下AccountController.php,修改为
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class AccountController extends BaseController
{
//直接传人sql方式操作数据库
function accountController(Request $request){
return User::all();
}
}
http://101.200.189.210/AccountController/accountController
[转]服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?
Unix/LinuxC技术 jackx 2017-1-10 22:21
一、用户在网站上观看网络视频或者网络教程的时候,有时候用户需要把视频下载到本地计算机中,但是一般的下载网站又不会提供下载按钮给用户,这样用户如果不利用插件就很难完成这样特殊的需求。今天给大家介绍一款可以把任何网站中的视频下载到本机电脑中的Chrome插件:Video download helper。
二、Chrome Cache View软件来下载:
Chrome Cache View,从名字上也可以看出来,这个软件的功能,比开发人员工具更加方便。免安装,运行后直接可以显示C:\Documents and Settings\用户名\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache中的内容,不过是以原始地址显示的。直接复制出来地址就可下载了。
三、Chrome 的 Video Downloader professional插件,插件图标是向上箭头那个。
二、Chrome Cache View软件来下载:
Chrome Cache View,从名字上也可以看出来,这个软件的功能,比开发人员工具更加方便。免安装,运行后直接可以显示C:\Documents and Settings\用户名\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache中的内容,不过是以原始地址显示的。直接复制出来地址就可下载了。
三、Chrome 的 Video Downloader professional插件,插件图标是向上箭头那个。
当开启MySQL数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间。
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.000005
…
有三种解决方法:1.关闭mysql主从,关闭binlog;2.开启mysql主从,设置expire_logs_days;3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin.010′;
实现:
1.关闭mysql主从,关闭binlog
# vim /etc/my.cnf //注释掉log-bin,binlog_format # Replication Master Server (default) # binary logging is required for replication # log-bin=mysql-bin # binary logging format - mixed recommended # binlog_format=mixed
然后重启数据库
2.重启mysql,开启mysql主从,设置expire_logs_days
# vim /etc/my.cnf //修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如10 expire_logs_days = x //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
此方法需要重启mysql,附录有关于expire_logs_days的英文说明
当然也可以不重启mysql,开启mysql主从,直接在mysql里设置expire_logs_days
> show binary logs; > show variables like '%log%'; > set global expire_logs_days = 10;
3.手动清除binlog文件
# /usr/local/mysql/bin/mysql -u root -p > PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); //删除10天前的MySQL binlog日志,附录2有关于PURGE MASTER LOGS手动删除用法及示例 > show master logs;
也可以重置master,删除所有binlog文件:
# /usr/local/mysql/bin/mysql -u root -p > reset master; //附录3有清除binlog时,对从mysql的影响说明
附录:
1.expire_logs_days英文说明
Where X is the number of days you’d like to keep them around. I would recommend 10, but this depends on how busy your MySQL server is and how fast these log files grow. Just make sure it is longer than the slowest slave takes to replicate the data from your master.
Just a side note: You know that you should do this anyway, but make sure you back up your mysql database. The binary log can be used to recover the database in certain situations; so having a backup ensures that if your database server does crash, you will be able to recover the data.
2.PURGE MASTER LOGS手动删除用法及示例,MASTER和BINARY是同义词
> PURGE {MASTER | BINARY} LOGS TO 'log_name' > PURGE {MASTER | BINARY} LOGS BEFORE 'date'
删除指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除MySQL BIN-LOG 日志,这样被给定的日志成为第一个。
实例:
> PURGE MASTER LOGS TO 'MySQL-bin.010'; //清除MySQL-bin.010日志 > PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; //清除2008-06-22 13:00:00前binlog日志 > PURGE MASTER LOGS BEFORE DATE_SUB( NOW, INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。
3.清除binlog时,对从mysql的影响
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
来自:http://m.toutiao.com/i6371662680515674625/?tt_from=copy_link&utm_campaign=client_share&app=news_article&utm_source=copy_link&iid=6966412074&utm_medium=toutiao_ios
Redis-benchmark测试Redis性能
Cache与Store jackx 2017-1-4 17:30
背景: 有时间对Redis的一个测试来看,特别是经过了网络,此时,会傻傻分不清楚是Redis本来性能就差,还是网络不好(PHP调用Redis的机器和Redis分离或不在同一网段),这个工具可以直接在Redis上测试Redis,或是在PHP上测试Redis,这样有一个粗粒度的判断和把握。
阅读全文

Laravel 扩展及调试利器 —— Laravel Debugbar 扩展包安装及使用教程,Laravel如何引用第三方(自定义)库。
Php/Js/Shell/Go jackx 2016-12-28 15:05
调试栏(Laravel Debug Bar)
PHP调试栏项目无疑是一个巨大的成功,你无需到处编写var_dump。Laravel调试栏对该组件作了扩展,包含了路由、视图、事件以及更多信息。
这使得调试变得更加简单、快速,提高你的开发效率。
Confide
认证模块,包含了登录、注册、退出、密码重置等功能。
代码生成器(Laravel Generators)
使用简单的命令行就可以自动根据代码模板生成Model/View/Controller代码以及模块(Module)。
HTML压缩器(Laravel HTML Minify)
让你的页面减小大概18%,提升性能必备
后台管理(Laravel Administrator)
Laravel Administrator帮助开发者快速构建后台管理界面,无需重复构建。
OAuth 4 Laravel:OAuth支持
OAuth 2服务器:安全和100%标准兼容的OAuth服务器
摘自下载量最高的 100 个 Laravel 扩展包推荐:
https://laravel-china.org/topics/2530

我的这种是因为Mysql正在运行,然后又启动时会出现这个问题,直接pkill -9 mysql:
手工运行:
服务器症状:
今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写不进去!第一反应,重启mysql数据库,一直执行中,停止不了也启动不了,直觉告诉我磁盘满了 !用df命令查了下,果然磁盘满了,因为当时分区采用系统默认,不知道为什么不能自动扩容!以后在处理这个问题!如图所示:
[root@rekfan ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/vg_rekfan-lv_root
51606140 47734848 1249852 100% /
tmpfs 1953396 88 1953308 1% /dev/shm
/dev/sda1 495844 37062 433182 8% /boot
/dev/mapper/vg_rekfan-lv_home
229694676 191796 217835016 1% /home
[root@rekfan ~]#
删除了些没用的日志后,重新启动数据库还是出错。http://blog.rekfan.com/?p=186
[root@rekfan mysql]# service mysql restart
MySQL server PID file could not be found![失败]
Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/rekfan.pid).[失败]
google了下 ,问题可能的原因有多种,具体什么原因最好的办法是先查看下错误日志:
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !http://blog.rekfan.com/?p=186
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
来自:http://blog.rekfan.com/articles/186.html
手工运行:
服务器症状:
今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写不进去!第一反应,重启mysql数据库,一直执行中,停止不了也启动不了,直觉告诉我磁盘满了 !用df命令查了下,果然磁盘满了,因为当时分区采用系统默认,不知道为什么不能自动扩容!以后在处理这个问题!如图所示:
[root@rekfan ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/vg_rekfan-lv_root
51606140 47734848 1249852 100% /
tmpfs 1953396 88 1953308 1% /dev/shm
/dev/sda1 495844 37062 433182 8% /boot
/dev/mapper/vg_rekfan-lv_home
229694676 191796 217835016 1% /home
[root@rekfan ~]#
删除了些没用的日志后,重新启动数据库还是出错。http://blog.rekfan.com/?p=186
[root@rekfan mysql]# service mysql restart
MySQL server PID file could not be found![失败]
Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/rekfan.pid).[失败]
google了下 ,问题可能的原因有多种,具体什么原因最好的办法是先查看下错误日志:
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !http://blog.rekfan.com/?p=186
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
来自:http://blog.rekfan.com/articles/186.html
背景:对于浏览器里有空格时候会转为%20,而还是是+,urlencode进行转换后 为什么空格是+号 不是%20?其实像Chrome浏览器显示的%20并不是urlencode,而是rawurlencode,摘自 :https://zhidao.baidu.com/question/808110280104926972.html 。
再就是对于一些线下二维码活动,如果二维码印错了,像上面多了一个不可见字符,是没法访问的,但印都印了,怎么办,得用Nginx的URLRewrite来解决掉。
http://XXXX.com/201*daiyanren-01.html ?fv=e5e131274705a31b5607b257ebe9c653
里面有一个空格,需要URL转写,但它不是空格,而是一个不可见的字符: .+
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
用\s也能匹配到:
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
这个不是空格看起来像是空格, 所以,它rawurlencode 后并不是%20:
php t.php
这个不是空格看起来像是空格:
html%C2%A0%3Ffv%3D
这个是空格是20%
rawurlencode
将字符串编码成 URL 专用格式。
语法: string rawurldecode(string str);
返回值: 字符串
函数种类: 编码处理
内容说明
本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个十六位数字的格式。例如,空格就会变成 %20。
使用范例
<?php
echo '<a href="ftp://guest:', rawurlencode ('foo @+%/'), '@localhost/x.txt">';
?>
来自:http://www.t086.com/code/php/function.php-rawurlencode.php
附录,Nginx的Url转写抄录:
再就是对于一些线下二维码活动,如果二维码印错了,像上面多了一个不可见字符,是没法访问的,但印都印了,怎么办,得用Nginx的URLRewrite来解决掉。
http://XXXX.com/201*daiyanren-01.html ?fv=e5e131274705a31b5607b257ebe9c653
里面有一个空格,需要URL转写,但它不是空格,而是一个不可见的字符: .+
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
用\s也能匹配到:
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
这个不是空格看起来像是空格, 所以,它rawurlencode 后并不是%20:
php t.php
这个不是空格看起来像是空格:
html%C2%A0%3Ffv%3D
这个是空格是20%
rawurlencode
将字符串编码成 URL 专用格式。
语法: string rawurldecode(string str);
返回值: 字符串
函数种类: 编码处理
内容说明
本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个十六位数字的格式。例如,空格就会变成 %20。
使用范例
<?php
echo '<a href="ftp://guest:', rawurlencode ('foo @+%/'), '@localhost/x.txt">';
?>
来自:http://www.t086.com/code/php/function.php-rawurlencode.php
附录,Nginx的Url转写抄录:
[列出时间]httpstat:一个检查网站性能的 curl 统计分析工具
Unix/LinuxC技术 jackx 2016-12-17 11:01
httpstat 是一个 Python 脚本,它以美妙妥善的方式反映了 curl 统计分析,它是一个单一脚本,兼容 Python 3 ,在用户的系统上不需要安装额外的软件(依赖)。
-- Aaron Kili
本文导航
-在 Linux 系统中安装 httpstat25%
-在 Linux 中如何使用 httpstat36%
编译自: http://www.tecmint.com/httpstat-curl-statistics-tool-check-website-performance/
作者: Aaron Kili
译者: wyangsun
从本质上来说它是一个 cURL 工具的封装,意味着你可以在 URL 后使用几个有效的 cURL 选项,但是不包括 -w、-D、-o、-s和-S选项,这些已经被 httpstat 使用了。
httpstat Curl 统计分析工具
你可以看到上图的一个 ASCII 表显示了每个过程消耗多长时间,对我来说最重要的一步是“服务器处理server processing” – 如果这个数字很高,那么你需要优化你网站服务器来加速访问速度[1]。
网站或服务器优化你可以查看我们的文章:
使用下面安装说明和用法来获取 httpstat 检查出你的网站速度。
在 Linux 系统中安装 httpstat
你可以使用两种合理的方法安装 httpstat :
使用 wget 命令直接从它的 Github 仓库获取如下:
$ wget -c https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
使用 pip(这个方法允许 httpstat 作为命令安装到你的系统中)像这样:
$ sudo pip install httpstat
注:确保 pip包已经在系统上安装了,如果没使用你的发行版包管理器yum或apt安装它。
在 Linux 中如何使用 httpstat
httpstat可以根据你安装它的方式来使用,如果你直接下载了它,进入下载目录使用下面的语句运行它:
$ python httpstat.py url cURL_options
如果你使用 pip来安装它,你可以作为命令来执行它,如下表:
$ httpstat url cURL_options
查看 httpstat帮助页,命令如下:
$ python httpstat.py --help
或
$ httpstat --help
httpstat帮助:
Usage: httpstat URL [CURL_OPTIONS]
httpstat -h | --help
httpstat --version
Arguments:
URL url to request, could be with or without `http(s)://` prefix
Options:
CURL_OPTIONS any curl supported options, except for -w -D -o -S -s,
which are already used internally.
-h --help show this screen.
--version show version.
Environments:
HTTPSTAT_SHOW_BODY Set to `true` to show response body in the output,
note that body length is limited to 1023 bytes, will be
truncated if exceeds. Default is `false`.
HTTPSTAT_SHOW_IP By default httpstat shows remote and local IP/port address.
Set to `false` to disable this feature. Default is `true`.
HTTPSTAT_SHOW_SPEED Set to `true` to show download and upload speed.
Default is `false`.
HTTPSTAT_SAVE_BODY By default httpstat stores body in a tmp file,
set to `false` to disable this feature. Default is `true`
HTTPSTAT_CURL_BIN Indicate the curl bin path to use. Default is `curl`
from current shell $PATH.
HTTPSTAT_DEBUG Set to `true` to see debugging logs. Default is `false`
从上面帮助命令的输出,你可以看出 httpstat已经具备了一些可以影响其行为的环境变量。
使用它们,只需输出适当的值的这些变量到 .bashrc或.zshrc文件。
例如:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
export HTTPSTAT_DEBUG=true
你一旦添加完它们,保存文件然后运行下面的命令使改变生效:
$ source ~/.bashrc
你可以指定使用 cURL 执行文件的路径,默认使用的是当前 shell 的 $PATH 环境变量[5]。
下面是一些展示 httpstat如何工作的例子。
$ python httpstat.py google.com
或
$ httpstat google.com
httpstat – 展示网站统计分析
接下来的命令中:
-X命令标记指定一个客户与 HTTP 服务器连接的请求方法。
--data-urlencode这个选项将会把数据(这里是 a=b)按 URL 编码的方式编码后再提交。
-v开启详细模式。
$ python httpstat.py httpbin.org/post -X POST --data-urlencode "a=b" -v
httpstat – 定制提交请求
你可以查看 cURL 的帮助获取更多有用的高级选项,或者浏览 httpstat的 Github 仓库:https://github.com/reorx/httpstat
这篇文章中,我们讲述了一个有效的工具,它以简单和整洁方式来查看 cURL 统计分析。如果你知道任何类似的工具,别犹豫,让我们知道,你也可以问问题或评论这篇文章或 httpstat,通过下面反馈。
-- Aaron Kili
本文导航
-在 Linux 系统中安装 httpstat25%
-在 Linux 中如何使用 httpstat36%
编译自: http://www.tecmint.com/httpstat-curl-statistics-tool-check-website-performance/
作者: Aaron Kili
译者: wyangsun
从本质上来说它是一个 cURL 工具的封装,意味着你可以在 URL 后使用几个有效的 cURL 选项,但是不包括 -w、-D、-o、-s和-S选项,这些已经被 httpstat 使用了。
httpstat Curl 统计分析工具
你可以看到上图的一个 ASCII 表显示了每个过程消耗多长时间,对我来说最重要的一步是“服务器处理server processing” – 如果这个数字很高,那么你需要优化你网站服务器来加速访问速度[1]。
网站或服务器优化你可以查看我们的文章:
使用下面安装说明和用法来获取 httpstat 检查出你的网站速度。
在 Linux 系统中安装 httpstat
你可以使用两种合理的方法安装 httpstat :
使用 wget 命令直接从它的 Github 仓库获取如下:
$ wget -c https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
使用 pip(这个方法允许 httpstat 作为命令安装到你的系统中)像这样:
$ sudo pip install httpstat
注:确保 pip包已经在系统上安装了,如果没使用你的发行版包管理器yum或apt安装它。
在 Linux 中如何使用 httpstat
httpstat可以根据你安装它的方式来使用,如果你直接下载了它,进入下载目录使用下面的语句运行它:
$ python httpstat.py url cURL_options
如果你使用 pip来安装它,你可以作为命令来执行它,如下表:
$ httpstat url cURL_options
查看 httpstat帮助页,命令如下:
$ python httpstat.py --help
或
$ httpstat --help
httpstat帮助:
Usage: httpstat URL [CURL_OPTIONS]
httpstat -h | --help
httpstat --version
Arguments:
URL url to request, could be with or without `http(s)://` prefix
Options:
CURL_OPTIONS any curl supported options, except for -w -D -o -S -s,
which are already used internally.
-h --help show this screen.
--version show version.
Environments:
HTTPSTAT_SHOW_BODY Set to `true` to show response body in the output,
note that body length is limited to 1023 bytes, will be
truncated if exceeds. Default is `false`.
HTTPSTAT_SHOW_IP By default httpstat shows remote and local IP/port address.
Set to `false` to disable this feature. Default is `true`.
HTTPSTAT_SHOW_SPEED Set to `true` to show download and upload speed.
Default is `false`.
HTTPSTAT_SAVE_BODY By default httpstat stores body in a tmp file,
set to `false` to disable this feature. Default is `true`
HTTPSTAT_CURL_BIN Indicate the curl bin path to use. Default is `curl`
from current shell $PATH.
HTTPSTAT_DEBUG Set to `true` to see debugging logs. Default is `false`
从上面帮助命令的输出,你可以看出 httpstat已经具备了一些可以影响其行为的环境变量。
使用它们,只需输出适当的值的这些变量到 .bashrc或.zshrc文件。
例如:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
export HTTPSTAT_DEBUG=true
你一旦添加完它们,保存文件然后运行下面的命令使改变生效:
$ source ~/.bashrc
你可以指定使用 cURL 执行文件的路径,默认使用的是当前 shell 的 $PATH 环境变量[5]。
下面是一些展示 httpstat如何工作的例子。
$ python httpstat.py google.com
或
$ httpstat google.com
httpstat – 展示网站统计分析
接下来的命令中:
-X命令标记指定一个客户与 HTTP 服务器连接的请求方法。
--data-urlencode这个选项将会把数据(这里是 a=b)按 URL 编码的方式编码后再提交。
-v开启详细模式。
$ python httpstat.py httpbin.org/post -X POST --data-urlencode "a=b" -v
httpstat – 定制提交请求
你可以查看 cURL 的帮助获取更多有用的高级选项,或者浏览 httpstat的 Github 仓库:https://github.com/reorx/httpstat
这篇文章中,我们讲述了一个有效的工具,它以简单和整洁方式来查看 cURL 统计分析。如果你知道任何类似的工具,别犹豫,让我们知道,你也可以问问题或评论这篇文章或 httpstat,通过下面反馈。
Linux 如何查看当前占用CPU或内存最多的K个进程, linux下查看最消耗CPU、内存的进程 。
Unix/LinuxC技术 jackx 2016-12-16 21:55
自定义查看rss,也就是实际占用内存量:
背景:有时发现一些进程运行着运行着其CPU的负载就变高了,怎么发现?怎么知道是进程还是线程高了,定位是一个问题,层层定位也是个问题,这对于Window不是个问题,对于Linux就是一个大问题。
定位一下进程PID:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 22381 2.1 0.5 273728 5860 ? S 20:03 2:22 php WebSocketServer.php
看线程:
[root@a php]# ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
USER PID PPID TID TIME %CPU CMD
root 3851 1 3851 00:00:46 0.0 php task.php
root 3851 1 3853 00:00:00 0.0 php task.php
root 3852 3851 3852 00:00:00 0.0 php task.php
1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
来自:http://blog.chinaunix.net/uid-15007890-id-3413584.html
如果是10个进程,K=10,如果是最高的三个,K=3
说明:ps -aux中(a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分)
ps -aux的输出格式如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]
sort -k4nr中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。
head -K(K指代行数,即输出前几位的结果)
|为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。
方法2:top (然后按下M,注意大写)
二、可以使用下面命令查使用CPU最多的K个进程
方法1:
ps -aux | sort -k3nr | head -K
方法2:top (然后按下P,注意大写)
来自:https://zhidao.baidu.com/question/371525749314218684.html
可以用下面的命令将 cpu 占用率高的线程找出来:
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。
直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3.
查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号
确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,
执行:grep SleepAVG **/status | sort -k2,2 | head, 确定cpu占用较高的线程号。
使用kill -3 pid 会打印线程堆栈的情况
来自:http://www.cnblogs.com/lidabo/p/4738113.html
背景:有时发现一些进程运行着运行着其CPU的负载就变高了,怎么发现?怎么知道是进程还是线程高了,定位是一个问题,层层定位也是个问题,这对于Window不是个问题,对于Linux就是一个大问题。
定位一下进程PID:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 22381 2.1 0.5 273728 5860 ? S 20:03 2:22 php WebSocketServer.php
看线程:
[root@a php]# ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
USER PID PPID TID TIME %CPU CMD
root 3851 1 3851 00:00:46 0.0 php task.php
root 3851 1 3853 00:00:00 0.0 php task.php
root 3852 3851 3852 00:00:00 0.0 php task.php
1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
来自:http://blog.chinaunix.net/uid-15007890-id-3413584.html
如果是10个进程,K=10,如果是最高的三个,K=3
说明:ps -aux中(a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分)
ps -aux的输出格式如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]
sort -k4nr中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。
head -K(K指代行数,即输出前几位的结果)
|为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。
方法2:top (然后按下M,注意大写)
二、可以使用下面命令查使用CPU最多的K个进程
方法1:
ps -aux | sort -k3nr | head -K
方法2:top (然后按下P,注意大写)
来自:https://zhidao.baidu.com/question/371525749314218684.html
可以用下面的命令将 cpu 占用率高的线程找出来:
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。
直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3.
查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号
确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,
执行:grep SleepAVG **/status | sort -k2,2 | head, 确定cpu占用较高的线程号。
使用kill -3 pid 会打印线程堆栈的情况
来自:http://www.cnblogs.com/lidabo/p/4738113.html
CentOS系统开发人员Fabian Arrotin非常高兴的宣布为ARM(armhfp)硬件架构发布CentOS Linux 7(1611)镜像。该GNU/Linux发行版本深受单板计算机和嵌入式设备的喜爱,支持树莓派3、树莓派2、Banana Pi,CubieTruck和Cubieboard单板计算机,CentOS Linux 7(1611)for armhfp涵盖一些激动人心的新技术,基于Linux Kernel 4.4 LTS内核,升级uboot镜像至2016.09版本等等。
需要注意的是,ARM版CentOS 7.3.1611是从Red Hat Enterprise Linux 7.3系统中派生出来的,这就意味着操作系统能够兼容上层系统。尽管CentOS 7 Userland for armhfp来自于CentOS 7 GNU/Linux发行版本,但是部分预安装包已经移除,或者针对armv7hl兼容设备进行了优化。
下载:
http://mirror.centos.org/altarch/7/isos/armhfp/Images
摘自:http://www.cnbeta.com/articles/567535.htm?_t_t_t=0.39831793188461095
需要注意的是,ARM版CentOS 7.3.1611是从Red Hat Enterprise Linux 7.3系统中派生出来的,这就意味着操作系统能够兼容上层系统。尽管CentOS 7 Userland for armhfp来自于CentOS 7 GNU/Linux发行版本,但是部分预安装包已经移除,或者针对armv7hl兼容设备进行了优化。
下载:
http://mirror.centos.org/altarch/7/isos/armhfp/Images
摘自:http://www.cnbeta.com/articles/567535.htm?_t_t_t=0.39831793188461095
有可能火,好像不支持IE8,但不重要了,现在是手机的天下,meteor也是其中一个,但目前好像不是太火:
http://www.cnblogs.com/rik28/p/6024425.html
http://www.cnblogs.com/rik28/p/6024425.html
[并发网卡]linux ethtool 查看网卡状态,lspci下是否支持多队列网卡的简介.
Unix/LinuxC技术 jackx 2016-12-16 11:56
背景:网卡流量80,如果是100M的网卡可能是瓶颈,而如何知道这个网卡是100M还是1000M的?用命令查询一下。阿里云的虚拟机好像看不到,用另一个命令看,这块涉及到网卡是否支持多队列网卡识别,Capabilities: [70] MSI-X: Enable+Masked-TabSize=10,阿里的是:Capabilities: [40] MSI-X: Enable+ Count=3 Masked-,参考链接:http://blog.sina.com.cn/s/blog_aed82f6f0102vwjx.html ,http://blog.csdn.net/wyaibyn/article/details/14109325。
lspci -vvv|grep network -B 1 -A 15
物理机上:
ethtool eth0
1.使用lspci -vvv命令查看网卡的参数。
Ethernet controller的条目内容,如果有MSI-X && Enable+ && TabSize > 1,则该网卡是多队列网卡。
2.如何打开网卡多队列
cat /etc/modprobe.conf查看网卡驱动。
broadcom网卡的驱动为e1000,默认打开网卡多队列
修改完驱动后需要重启。查看是否打开了网卡多队列,以broadcom网卡为例。cat /proc/interrupt | grep eth。产生了8个网卡队列,并且对应着不同的中断。
3.设置中断CPU亲和性方法
将中断52-59分别绑定到CPU0-7上。
echo "1" > /proc/irq/52/smp_affinity
echo "2" > /proc/irq/53/smp_affinity
echo "4" > /proc/irq/54/smp_affinity
echo "8" > /proc/irq/55/smp_affinity
echo "10" > /proc/irq/56/smp_affinity
echo "20" > /proc/irq/57/smp_affinity
echo "40" > /proc/irq/58/smp_affinity
echo "80" > /proc/irq/59/smp_affinity
/proc/irq/${IRQ_NUM}/smp_affinity为中断号为IRQ_NUM的中断绑定的CPU核的情况。以十六进制表示,每一位代表一个CPU核。
1(00000001)代表CPU0
2(00000010)代表CPU1
3(00000011)代表CPU0和CPU1
阿里私有云虚拟的网卡有些简单:
ethtool eth0
Settings for eth0:
Link detected: yes
ethtool 工具关于网络协商功能介绍;
ethtool - Display or change ethernet card settings(ethtool 是用来显示和更改网卡设置的工具);这个工具比较复杂,功能也特别多。由于洋文比较难懂。所以我们还是把网络设备协商方式的设置方法说一说。
2.1 ethtool 显示网络端口设置功能;
这个功能比较好办。就是ethtool 后面直接接网絽接口就行;比如下面的例子;
[root@localhost ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No 注:自动协商关闭
Speed: 100Mb/s 注:速度 100Mb
Duplex: Full 注:全双工
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes 注:eth0已经激活;
摘自:https://my.oschina.net/u/1986074/blog/517033
======================================================================
现象
Redis 进程 cpu 跑满
原因
没有开启网卡多队列,导致只有一个cpu被使用
网卡在同一时刻只能产生一个中断,CPU在同一时刻只能响应一个中断,由于配置的原因,只有一颗cpu去响应中断(这个是可调的),所以所有的流量都压在了一个CPU上 ,把CPU跑满了。
为什么只有一颗cpu去响应中断?
这个是历史设计的问题,一开始CPU都是一核的,只能由唯一的CPU去响应,后来逐步发展出了多核的CPU,才有了可调整的参数去调整到底由几个CPU去处理。
处理方法
修改方案
1. 修改/etc/modprobe.d/modprobe.conf
在文件最后追加三行
alias eth0 igb
alias eth1 igb
options igb RSS=8,8
image001.png
2. 修改完之后就需要重启网络才能生效
只需要重新加载内核模块和重启网络服务就可以了,实际测试需要20s时间
操作命令
nohup rmmod igb && modprobe igb && /etc/init.d/network restart && /etc/rc3.d/S27route
来自:http://blog.csdn.net/fjq5a/article/details/53747444
lspci -vvv|grep network -B 1 -A 15
物理机上:
ethtool eth0
1.使用lspci -vvv命令查看网卡的参数。
Ethernet controller的条目内容,如果有MSI-X && Enable+ && TabSize > 1,则该网卡是多队列网卡。
2.如何打开网卡多队列
cat /etc/modprobe.conf查看网卡驱动。
broadcom网卡的驱动为e1000,默认打开网卡多队列
修改完驱动后需要重启。查看是否打开了网卡多队列,以broadcom网卡为例。cat /proc/interrupt | grep eth。产生了8个网卡队列,并且对应着不同的中断。
3.设置中断CPU亲和性方法
将中断52-59分别绑定到CPU0-7上。
echo "1" > /proc/irq/52/smp_affinity
echo "2" > /proc/irq/53/smp_affinity
echo "4" > /proc/irq/54/smp_affinity
echo "8" > /proc/irq/55/smp_affinity
echo "10" > /proc/irq/56/smp_affinity
echo "20" > /proc/irq/57/smp_affinity
echo "40" > /proc/irq/58/smp_affinity
echo "80" > /proc/irq/59/smp_affinity
/proc/irq/${IRQ_NUM}/smp_affinity为中断号为IRQ_NUM的中断绑定的CPU核的情况。以十六进制表示,每一位代表一个CPU核。
1(00000001)代表CPU0
2(00000010)代表CPU1
3(00000011)代表CPU0和CPU1
阿里私有云虚拟的网卡有些简单:
ethtool eth0
Settings for eth0:
Link detected: yes
ethtool 工具关于网络协商功能介绍;
ethtool - Display or change ethernet card settings(ethtool 是用来显示和更改网卡设置的工具);这个工具比较复杂,功能也特别多。由于洋文比较难懂。所以我们还是把网络设备协商方式的设置方法说一说。
2.1 ethtool 显示网络端口设置功能;
这个功能比较好办。就是ethtool 后面直接接网絽接口就行;比如下面的例子;
[root@localhost ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No 注:自动协商关闭
Speed: 100Mb/s 注:速度 100Mb
Duplex: Full 注:全双工
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes 注:eth0已经激活;
摘自:https://my.oschina.net/u/1986074/blog/517033
======================================================================
现象
Redis 进程 cpu 跑满
原因
没有开启网卡多队列,导致只有一个cpu被使用
网卡在同一时刻只能产生一个中断,CPU在同一时刻只能响应一个中断,由于配置的原因,只有一颗cpu去响应中断(这个是可调的),所以所有的流量都压在了一个CPU上 ,把CPU跑满了。
为什么只有一颗cpu去响应中断?
这个是历史设计的问题,一开始CPU都是一核的,只能由唯一的CPU去响应,后来逐步发展出了多核的CPU,才有了可调整的参数去调整到底由几个CPU去处理。
处理方法
修改方案
1. 修改/etc/modprobe.d/modprobe.conf
在文件最后追加三行
alias eth0 igb
alias eth1 igb
options igb RSS=8,8
image001.png
2. 修改完之后就需要重启网络才能生效
只需要重新加载内核模块和重启网络服务就可以了,实际测试需要20s时间
操作命令
nohup rmmod igb && modprobe igb && /etc/init.d/network restart && /etc/rc3.d/S27route
来自:http://blog.csdn.net/fjq5a/article/details/53747444
vim切换tab标签快捷键,
Unix/LinuxC技术 jackx 2016-12-14 22:50
vim从vim7开始加入了多标签切换的功能,相当于多窗口。
之前的版本虽然也有多文件编辑功能,但是总之不如这个方便啦。
实践成功功能如下,冒号输入:
:tabr #第一个Tab标签页
:tabl #最后一个标签页面
:tabnew #新建标签页面
#先用:tabs 列出已打开的标签列表,">"表示当前标签页
:tabm 0 移到第一个标签页
:tabm 当前标签移到最后
关闭标签页
:q # 直如关闭标签,tabc 关闭当前标签页。
:tabo 关闭所有的标签页。
切换标签
:tabn或gt 移动到下一个标签页。
:tabp或gT 移动到上一个标签页。
:tabfirst或:tabr 移动到第一个标签页。
来自:http://liuzhijun.iteye.com/blog/1836428
:bn—下一个文件
:bp—上一个文件
:ctrl+w + 纵向扩大(行数增加)
:ctrl+w - 纵向缩小 (行数减少)
关闭多窗口
可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
关闭窗口
q 或 close #关闭当前窗口
only #保留当前窗口,关闭其它所有窗口
qall(qa) #退出所有窗口
wall #保存所有窗口
多标签页命令
:tabdo <命令> 同时在多个标签页中执行命令。比如:tabdo %s/food/drink/g 命令把当前多个标签页文件中的“food”都替换成“drink”。
用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
更多可以查看帮助 :help table , help -p
使用alt+数字键来切换tab (vim7+)
不过用gt,gT来一个个切换有点不方便, 如果用:tabnext {count}, 又按键太多. 加入以下代码后, 可以用 alt+n来切换,
比如alt+1切换到第一个tab,alt+2切换到第二个tab。
把以下代码加到vimrc, 或者存为.vim文件,再放到plugin目。
function! TabPos_ActivateBuffer(num)
let s:count = a:num
exe "tabfirst"
exe "tabnext" s:count
endfunction
function! TabPos_Initialize()
for i in range(1, 9)
exe "map <M-" . i . "> :call TabPos_ActivateBuffer(" . i . ")<CR>"
endfor
exe "map <M-0> :call TabPos_ActivateBuffer(10)<CR>"
endfunction
autocmd VimEnter * call TabPos_Initialize()
上面的看上去太复杂了,来个简单的。
:nn <M-1> 1gt
:nn <M-2> 2gt
:nn <M-3> 3gt
:nn <M-4> 4gt
:nn <M-5> 5gt
:nn <M-6> 6gt
:nn <M-7> 7gt
:nn <M-8> 8gt
:nn <M-9> 9gt
:nn <M-0> :tablast<CR>
把这个放进_vimrc配置文件里。
参考至:http://www.liurongxing.com/vim-tab-shortcut.html
之前的版本虽然也有多文件编辑功能,但是总之不如这个方便啦。
实践成功功能如下,冒号输入:
:tabr #第一个Tab标签页
:tabl #最后一个标签页面
:tabnew #新建标签页面
#先用:tabs 列出已打开的标签列表,">"表示当前标签页
:tabm 0 移到第一个标签页
:tabm 当前标签移到最后
关闭标签页
:q # 直如关闭标签,tabc 关闭当前标签页。
:tabo 关闭所有的标签页。
切换标签
:tabn或gt 移动到下一个标签页。
:tabp或gT 移动到上一个标签页。
:tabfirst或:tabr 移动到第一个标签页。
来自:http://liuzhijun.iteye.com/blog/1836428
:bn—下一个文件
:bp—上一个文件
:ctrl+w + 纵向扩大(行数增加)
:ctrl+w - 纵向缩小 (行数减少)
关闭多窗口
可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
关闭窗口
q 或 close #关闭当前窗口
only #保留当前窗口,关闭其它所有窗口
qall(qa) #退出所有窗口
wall #保存所有窗口
多标签页命令
:tabdo <命令> 同时在多个标签页中执行命令。比如:tabdo %s/food/drink/g 命令把当前多个标签页文件中的“food”都替换成“drink”。
用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
更多可以查看帮助 :help table , help -p
使用alt+数字键来切换tab (vim7+)
不过用gt,gT来一个个切换有点不方便, 如果用:tabnext {count}, 又按键太多. 加入以下代码后, 可以用 alt+n来切换,
比如alt+1切换到第一个tab,alt+2切换到第二个tab。
把以下代码加到vimrc, 或者存为.vim文件,再放到plugin目。
function! TabPos_ActivateBuffer(num)
let s:count = a:num
exe "tabfirst"
exe "tabnext" s:count
endfunction
function! TabPos_Initialize()
for i in range(1, 9)
exe "map <M-" . i . "> :call TabPos_ActivateBuffer(" . i . ")<CR>"
endfor
exe "map <M-0> :call TabPos_ActivateBuffer(10)<CR>"
endfunction
autocmd VimEnter * call TabPos_Initialize()
上面的看上去太复杂了,来个简单的。
:nn <M-1> 1gt
:nn <M-2> 2gt
:nn <M-3> 3gt
:nn <M-4> 4gt
:nn <M-5> 5gt
:nn <M-6> 6gt
:nn <M-7> 7gt
:nn <M-8> 8gt
:nn <M-9> 9gt
:nn <M-0> :tablast<CR>
把这个放进_vimrc配置文件里。
参考至:http://www.liurongxing.com/vim-tab-shortcut.html
[实践OK]和cmake原理和使用,CentOS7 升级 cmake,CMake 3.1 or higher is required. You are running version 2.8.12.2。
Unix/LinuxC技术 jackx 2016-12-14 11:08
现象:cmake ../
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.1 or higher is required. You are running version 2.8.12.2
-- Configuring incomplete, errors occurred!
一)编译C通过cmake:
# 如何编译和执行
本工程使用CMake来编译,CMake的好处是方便跨平台执行。关于CMake,可以访问(https://cmake.org/)。
在Linux环境下,请先创建build目录,并到目录build下,执行cmake
```bash
mkdir build && cd build
cmake ../
```
再执行
```bash
make
```
如果你的Linux中无法运行cmake或make命令,可以按照如下命令安装它
```bash
sudo apt-get install cmake g++ make
```
所有的可执行程序在目录build/bin下面
如果你有CLion或者其他可视化的IDE,可以直接在IDE中执行"Build Project"来完成整个项目的编译。
二)升级 cmake 的步骤:
卸载原有通过 yum 安装的 cmake
yum remove cmake
下载cmake安装包
cd /opt
wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5-Linux-x86_64.tar.gz
解压下载好的cmake二进制包
cd /opt
tar zxvf cmake-3.14.5-Linux-x86_64.tar.gz
解压成功后,就可以在 /opt 目录下看到一个 cmake-3.14.5-Linux-x86_64 目录,下面添加cmake环境变量,编辑 /etc/profile.d/cmake.sh 文件,写入以下内容:
export CMAKE_HOME=/opt/cmake-3.14.5-Linux-x86_64
export PATH=$PATH:$CMAKE_HOME/bin
保存并退出,执行命令让 cmake 环境文件生效
source /etc/profile
此时,再次查看cmake版本,就已经是 3.14.5 了:
cmake -version
cmake 版本升级完毕。
来自:https://www.jianshu.com/p/d5dd6514526a
Mysql新版本均采用了cmake:
http://mp.weixin.qq.com/s?__biz=MzI0MTEyMzgxOA==&mid=2247483751&idx=1&sn=124007f577a8d697040479942935d88a&chksm=e91129e2de66a0f4b6e385d663c927c7e0386255d29af3a7a7f2550ff84abbf5a95a457bbdc1&mpshare=1&scene=23&srcid=1214WmcU4f5K7XqqSEIfWo6l#rd
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.1 or higher is required. You are running version 2.8.12.2
-- Configuring incomplete, errors occurred!
一)编译C通过cmake:
# 如何编译和执行
本工程使用CMake来编译,CMake的好处是方便跨平台执行。关于CMake,可以访问(https://cmake.org/)。
在Linux环境下,请先创建build目录,并到目录build下,执行cmake
```bash
mkdir build && cd build
cmake ../
```
再执行
```bash
make
```
如果你的Linux中无法运行cmake或make命令,可以按照如下命令安装它
```bash
sudo apt-get install cmake g++ make
```
所有的可执行程序在目录build/bin下面
如果你有CLion或者其他可视化的IDE,可以直接在IDE中执行"Build Project"来完成整个项目的编译。
二)升级 cmake 的步骤:
卸载原有通过 yum 安装的 cmake
yum remove cmake
下载cmake安装包
cd /opt
wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5-Linux-x86_64.tar.gz
解压下载好的cmake二进制包
cd /opt
tar zxvf cmake-3.14.5-Linux-x86_64.tar.gz
解压成功后,就可以在 /opt 目录下看到一个 cmake-3.14.5-Linux-x86_64 目录,下面添加cmake环境变量,编辑 /etc/profile.d/cmake.sh 文件,写入以下内容:
export CMAKE_HOME=/opt/cmake-3.14.5-Linux-x86_64
export PATH=$PATH:$CMAKE_HOME/bin
保存并退出,执行命令让 cmake 环境文件生效
source /etc/profile
此时,再次查看cmake版本,就已经是 3.14.5 了:
cmake -version
cmake 版本升级完毕。
来自:https://www.jianshu.com/p/d5dd6514526a
Mysql新版本均采用了cmake:
http://mp.weixin.qq.com/s?__biz=MzI0MTEyMzgxOA==&mid=2247483751&idx=1&sn=124007f577a8d697040479942935d88a&chksm=e91129e2de66a0f4b6e385d663c927c7e0386255d29af3a7a7f2550ff84abbf5a95a457bbdc1&mpshare=1&scene=23&srcid=1214WmcU4f5K7XqqSEIfWo6l#rd
php解析url并得到url中的参数
Php/Js/Shell/Go jackx 2016-12-13 20:53
背景:像做点PHP给那个下位机,也就是现在的物联网芯片发送指令这种,用到这样的一个串,发送下去后,下位机解析后(解析到串里部分值修改后原样返回)再以串返回,自己想对串里作修改啥的用到这种url参数结构,如:framefd=4&fd=1&act=display&command=gettemp,解析在数组,同数组里的key=>value再解析成串。
parse_url
parse_str
From:http://www.cnblogs.com/freespider/p/4262244.html
parse_url
parse_str
From:http://www.cnblogs.com/freespider/p/4262244.html
redis的hGetAll函数的性能问题,redis缓慢多是hgetall导致的当然其他的情况也有...
Cache与Store jackx 2016-12-12 14:17
背景:如果redis缓慢多是hgetall导致的当然其他的情况也有...
在没关注这个函数之前,一直用的Memcache的数据存储方式,但是自从更换了redis之后,对于一个hash的数据存与取 对于Memcache方便甚多,但是问题来了,一个hash的列表如果量不大的情况,用hGetAll函数几乎看不出问题,一旦这个列表超过50或者更多时,此时用hGetAll函数便能很直观的看到性能问题,这里就不作数据分析了。
Redis是单线程的!当它处理一个请求时其他的请求只能等着。通常请求都会很快处理完,但是当我们使用HGETALL的时候,必须遍历每个字段来获取数据,这期间消耗的CPU资源和字段数成正比,如果还用了PIPELINING,无疑更是雪上加霜。
PERFORMANCE = CPUs / OPERATIONs
也就是说,此场景下为了提升性能,要么增加运算过程中的CPU数量;要么降低运算过程中的操作数量。在为了继续使用hash结构的数据,又要解决此问题,比较方便的方法就是将hash以序列化字符串存储,取的时候先取出反序列化的数据,再用hGet(key,array(hash..))。
例如:
....
$arrKey = array('dbfba184bef630526a75f2cd073a6098','dbfba184bef630526a75f2cd0dswet98')
$strKey = 'test';
$obj->hmGet($strKey,$arrKey);
把原本的hGetAll操作简化为hGet,也就是说,不再需要遍历hash中的每一个字段,因此即便不能让多个CPU参与运算,但是却大幅降低了操作数量,所以性能的提升仍然是显著的;当然劣势也很明显,和所有的冗余方式一样,此方案浪费了大量的内存。
有人会问,这样虽然没有了遍历字段的过程,但是却增加了反序列化的过程,而反序列化的成本往往也是很高的,难道这样也能提升性能?问题的关键在于开始我们遍历字段的操作是在一个cpu上完成的,后来反序列化的操作,不管是什么语言,都可以通过多进程或多线程来保证是在多个cpu上完成的,所以性能总体上是提升的。
另外,很多人直觉是通过运行redis多实例来解决问题。确实,这样可以增加运算过程中的CPU数量,有助于提升性能,但是需要注意的是,hGetAll和PIPELINING往往会让运算过程中的操作数量呈几何级爆炸式增长,相比之下,我们能增加的redis多实例数量简直就是杯水车薪,所以本例中这种方法不能彻底解决问题。
来自:http://www.mudbest.com/redis%E7%9A%84hgetall%E5%87%BD%E6%95%B0%E7%9A%84%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/?utm_source=tuicool&utm_medium=referral
在没关注这个函数之前,一直用的Memcache的数据存储方式,但是自从更换了redis之后,对于一个hash的数据存与取 对于Memcache方便甚多,但是问题来了,一个hash的列表如果量不大的情况,用hGetAll函数几乎看不出问题,一旦这个列表超过50或者更多时,此时用hGetAll函数便能很直观的看到性能问题,这里就不作数据分析了。
Redis是单线程的!当它处理一个请求时其他的请求只能等着。通常请求都会很快处理完,但是当我们使用HGETALL的时候,必须遍历每个字段来获取数据,这期间消耗的CPU资源和字段数成正比,如果还用了PIPELINING,无疑更是雪上加霜。
PERFORMANCE = CPUs / OPERATIONs
也就是说,此场景下为了提升性能,要么增加运算过程中的CPU数量;要么降低运算过程中的操作数量。在为了继续使用hash结构的数据,又要解决此问题,比较方便的方法就是将hash以序列化字符串存储,取的时候先取出反序列化的数据,再用hGet(key,array(hash..))。
例如:
....
$arrKey = array('dbfba184bef630526a75f2cd073a6098','dbfba184bef630526a75f2cd0dswet98')
$strKey = 'test';
$obj->hmGet($strKey,$arrKey);
把原本的hGetAll操作简化为hGet,也就是说,不再需要遍历hash中的每一个字段,因此即便不能让多个CPU参与运算,但是却大幅降低了操作数量,所以性能的提升仍然是显著的;当然劣势也很明显,和所有的冗余方式一样,此方案浪费了大量的内存。
有人会问,这样虽然没有了遍历字段的过程,但是却增加了反序列化的过程,而反序列化的成本往往也是很高的,难道这样也能提升性能?问题的关键在于开始我们遍历字段的操作是在一个cpu上完成的,后来反序列化的操作,不管是什么语言,都可以通过多进程或多线程来保证是在多个cpu上完成的,所以性能总体上是提升的。
另外,很多人直觉是通过运行redis多实例来解决问题。确实,这样可以增加运算过程中的CPU数量,有助于提升性能,但是需要注意的是,hGetAll和PIPELINING往往会让运算过程中的操作数量呈几何级爆炸式增长,相比之下,我们能增加的redis多实例数量简直就是杯水车薪,所以本例中这种方法不能彻底解决问题。
来自:http://www.mudbest.com/redis%E7%9A%84hgetall%E5%87%BD%E6%95%B0%E7%9A%84%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/?utm_source=tuicool&utm_medium=referral