CloudLinux OS (Operating System) improves server stability, density and security by isolating each tenant and providing them with limited server resources.
It comes with many components that control system resources in many aspects.
It creates a virtual environment for each user using the Lightweight Virtualized Environment (LVE) feature, which allows you to control server resources such as memory, CPU, IO, IOPS, number of processes and other limits for each tenant.
CloudLinux components can be easily managed through Graphical user interface (GUI) without any issues if you have installed it with supported control panels like cPanel, Plesk, ISPmanager, DirectAdmin, and InterWorx.
Otherwise, you need to use the following utilities to manage them via the command line.
Using command line is also easy and you can complete the activity faster than the GUI method.
1) lvectl Command Usage
lvectl is the primary tool for LVE management. It allows you to set/reset all LVE settings based on configuration in /etc/container/ve.cfg
. It requires administrator privilege.
Syntax: lvectl command [lveid] [options]
To list loaded LVE’s with LVE id, use the following command:
# lvectl list | more ID SPEED NCPU PMEM VMEM EP NPROC IO IOPS default 25 1 1.0G 1.0G 20 100 1024 1024 512 25 1 1.0G 1.0G 20 100 1024 1024 514 25 1 1.0G 1.0G 20 100 1024 1024 515 25 1 1.0G 1.0G 20 100 1024 1024 516 25 1 1.0G 1.0G 20 100 1024 1024 517 25 1 1.0G 1.0G 20 100 1024 1024 518 25 1 1.0G 1.0G 20 100 1024 1024 513 25 1 1.0G 1.0G 20 100 1024 1024 . .
List the loaded LVE’s with the username instead of the LVE ID:
# lvectl list-user | more ID SPEED NCPU PMEM VMEM EP NPROC IO IOPS default 25 1 1.0G 1.0G 20 100 1024 1024 datapoin 25 1 1.0G 1.0G 20 100 1024 1024 devpro 25 1 1.0G 1.0G 20 100 1024 1024 dhanjale 25 1 1.0G 1.0G 20 100 1024 1024 dowellte 25 1 1.0G 1.0G 20 100 1024 1024 earthrec 25 1 1.0G 1.0G 20 100 1024 1024 electron 25 1 1.0G 1.0G 20 100 1024 1024 deepamfl 25 1 1.0G 1.0G 20 100 1024 1024 evergree 25 1 1.0G 1.0G 20 100 1024 1024 gitiwapt 25 1 1.0G 1.0G 20 100 1024 1024 . .
Use the following commands to remove limits for a specific user, such as cpu, ncpu, io, nproc, pmem, vmem and entry processes.
Check current or default limits for a particular user. In this case, we will be checking the “daygeek” user limits:
# lvectl list-user | grep daygeekc daygeekc 25 1 1.0G 1.0G 20 100 1024 1024
To remove limits, run the below command:
# lvectl set-user daygeekc --unlimited
To change a specific field limit, use the below command. For instance, to set speed limit to 50%, run:
# lvectl set-user daygeekc --speed=50% daygeekc 50 1 1.0G 1.0G 20 100 1024 1024
To remove customized limits for the user and return to default, run below command:
# lvectl delete-user daygeekc
2) lveps Command Usage
lveps tool shows information about running LVE’s, processes and threads belonging to them, CPU/memory/IO usage consumed by LVEs and their individual processes/threads. LVE is only reported if it is considered active.
Syntax: lveps [options]
The following command will display processes running inside ‘active’ LVE’s:
# lveps -p -n ID EP PNO COM TNO TID CPU MEM DT DO 621 3 6 --- 6 --- 1163 115 0 0 --- --- php --- 137743 0 26 N/A N/A --- --- php --- 137742 0 26 N/A N/A --- --- php --- 137741 0 26 N/A N/A --- --- httpd --- 132958 0 5 N/A N/A --- --- httpd --- 132443 0 5 N/A N/A --- --- httpd --- 131632 0 5 N/A N/A
3) lvetop Command Usage
lvetop utility allows you to monitor LVE usage. It shows the following fields such as username, number of entry processes, number of processes, number of threads, CPU usage, Memory usage, I/O usage and IOPS.
# lvetop ID EP PNO TNO SPEED MEM IO IOPS daygeekc 0 0 0 11% 0 0 0
4) cldetect Command Usage
cldetect is used to detect installed software, and adjust CloudLinux options accordingly.
Syntax: /usr/bin/cldetect [--options]
To check installed cPanel version, run below command:
# /usr/bin/cldetect --detect-cp cPanel,11.50.0
5) LVE-stats 2 Command Usage
The LVE-stats 2 collects LVE usage statistics, and allows to query the data. It contains many tools that are used to collect different information about LVE usage.
5a) lveinfo Command Usage
lveinfo is an utility to display historical information about LVE usage, as shown below.
Query historical information about LVE usage by LVE ID.
# /usr/sbin/lveinfo +---+----+----+----+---+---+----+---+---+---+-----+------+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+ | ID|aCPU|mCPU|lCPU|aIO|mIO|lIO |aEP|mEP|lEP|aVMem|mVMem |lVMem|aPMem|mPMem |lPMem|aNproc|mNproc|lNproc|EPf|VMemF|PMemF|NprocF|aIOPS|mIOPS|lIOPS| +---+----+----+----+---+---+----+---+---+---+-----+------+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+ |641| 4 | 25 | 25 | 0 | 29|1024| 0 | 6 | 20|14.5M|107.6M| 1.0G| 9.4M|317.3M| 1.0G| 0 | 6 | 100 | 0 | 0 | 0 | 0 | 1 | 234 | 1024| |621| 1 | 21 |100 | 0 | 0 | 0 | 0 | 2 | 0 | 1.4M|76.9M | 0 | 9.7M|95.6M | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |515| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 395K| 520K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |518| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 120K| 120K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |534| 0 | 1 | 25 | 0 | 64|1024| 0 | 1 | 20| 41K | 5.6M | 1.0G| 3.9M|10.3M | 1.0G| 0 | 1 | 100 | 0 | 0 | 0 | 0 | 0 | 15 | 1024| |563| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 2.7M| 2.7M | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |582| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 84K | 84K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |588| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 105K| 108K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |618| 0 | 9 | 25 | 0 | 6 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 8.0M|14.9M | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |639| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 12K | 12K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| +---+----+----+----+---+---+----+---+---+---+-----+------+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+
Query historical information about LVE usage by username as shown below:
# /usr/sbin/lveinfo -d +--------+----+----+----+---+---+----+---+---+---+-----+-----+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+ | ID |aCPU|mCPU|lCPU|aIO|mIO|lIO |aEP|mEP|lEP|aVMem|mVMem|lVMem|aPMem|mPMem |lPMem|aNproc|mNproc|lNproc|EPf|VMemF|PMemF|NprocF|aIOPS|mIOPS|lIOPS| +--------+----+----+----+---+---+----+---+---+---+-----+-----+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+ |daygeekc| 1 | 25 |100 | 0 | 0 | 0 | 0 | 3 | 0 | 1.9M|87.1M| 0 |12.6M|118.1M| 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |dhanjale| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 172K| 172K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |earthrec| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 72K | 72K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |electron| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 104K| 112K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |hindusta| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 68K | 68K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |icaisale| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 156K| 156K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |jiptech | 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 188K| 188K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |needsbuy| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 5.5M| 5.5M | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |nivasign| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 5.0M| 5.2M | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| |renghaho| 0 | 0 | 25 | 0 | 0 |1024| 0 | 0 | 20| 0 | 0 | 1.0G| 280K| 280K | 1.0G| 0 | 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 1024| +--------+----+----+----+---+---+----+---+---+---+-----+-----+-----+-----+------+-----+------+------+------+---+-----+-----+------+-----+-----+-----+
Find the top 10 users who have consumed the maximum CPU usage for a period of time using below command:
# lveinfo --from='2015-07-25' --to='2015-08-05' -o cpu_max --display-username +--------+----+----+----+---+----+----+---+---+---+------+------+-----+-----+------+-----+------+------+------+----+-----+-----+------+-----+------+-----+ | ID |aCPU|mCPU|lCPU|aIO|mIO |lIO |aEP|mEP|lEP|aVMem |mVMem |lVMem|aPMem|mPMem |lPMem|aNproc|mNproc|lNproc|EPf |VMemF|PMemF|NprocF|aIOPS|mIOPS |lIOPS| +--------+----+----+----+---+----+----+---+---+---+------+------+-----+-----+------+-----+------+------+------+----+-----+-----+------+-----+------+-----+ |daygeekc| 2 |100 |100 | 1 |1024|1024| 6 |149| 20|212.6M| 3.9G | 1.0G|25.3M|738.2M| 1.0G| 6 | 152 | 100 |5996| 0 | 0 | 0 | 9 |100573| 1024| |holidays| 0 | 25 | 25 | 2 |1024|1024| 0 | 20| 20| 341K |209.0M| 1.0G| 1.6M|113.1M| 1.0G| 0 | 22 | 100 | 9 | 0 | 0 | 0 | 1 |12431 | 1024| |needsbuy| 0 | 25 | 25 | 1 |1024|1024| 0 | 15| 20| 1.5M |524.6M| 1.0G| 7.0M|657.4M| 1.0G| 0 | 15 | 100 | 0 | 0 | 0 | 0 | 0 | 2270 | 1024| |renghaho| 0 | 25 | 25 | 0 |1024|1024| 0 | 20| 20| 26K |265.8M| 1.0G| 293K|666.6M| 1.0G| 0 | 20 | 100 | 46 | 0 | 0 | 0 | 0 | 3517 | 1024| |royaljo | 0 | 25 | 25 | 0 |1020|1024| 0 | 2 | 20| 884 |35.5M | 1.0G| 154K|122.9M| 1.0G| 0 | 2 | 100 | 0 | 0 | 0 | 0 | 0 | 95 | 1024| |workstud| 0 | 25 | 25 | 3 |1024|1024| 0 | 20| 20| 1.0M |650.1M| 1.0G| 7.1M|688.9M| 1.0G| 0 | 20 | 100 | 3 | 0 | 0 | 0 | 0 | 2302 | 1024| | 619 | 0 | 25 | 25 | 2 |1024|1024| 0 | 20| 20| 564K |331.9M| 1.0G| 1.9M|718.8M| 1.0G| 0 | 21 | 100 |214 | 0 | 0 | 0 | 1 | 6145 | 1024| | 620 | 0 | 25 | 25 | 0 |1024|1024| 0 | 3 | 20| 48K |39.3M | 1.0G| 744K|82.0M | 1.0G| 0 | 3 | 100 | 0 | 0 | 0 | 0 | 0 | 2011 | 1024| |brockcoi| 0 | 25 | 25 | 0 |1024|1024| 0 | 7 | 20| 84K |126.0M| 1.0G| 797K|296.9M| 1.0G| 0 | 7 | 100 | 0 | 0 | 0 | 0 | 0 | 195 | 1024| |ginnyhel| 0 | 25 | 25 | 0 |1024|1024| 0 | 3 | 20| 1K |35.4M | 1.0G| 187K|99.5M | 1.0G| 0 | 3 | 100 | 0 | 0 | 0 | 0 | 0 | 315 | 1024| +--------+----+----+----+---+----+----+---+---+---+------+------+-----+-----+------+-----+------+------+------+----+-----+-----+------+-----+------+-----+
Find specific user statistics for a specific period of time using below command:
# lveinfo --from='2015-08-01' --to='2015-08-05' --user=daygeekc --display-username +-----------+-----------+----+----+----+---+---+---+---+ | From | To |aCPU|mCPU|lCPU|aEP|mEP|lEP|EPf| +-----------+-----------+----+----+----+---+---+---+---+ |07-31 23:30|08-01 00:30| 1 | 55 |100 | 0 | 1 | 0 | 0 | |08-01 00:30|08-01 01:30| 0 | 26 |100 | 0 | 2 | 0 | 0 | |08-01 01:30|08-01 02:30| 7 | 79 |100 | 0 | 2 | 0 | 0 | |08-01 02:30|08-01 03:30| 0 | 21 |100 | 0 | 2 | 0 | 0 | |08-01 03:30|08-01 04:30| 0 | 19 |100 | 0 | 2 | 0 | 0 | . . |08-04 15:30|08-04 16:30| 1 | 31 |100 | 0 | 2 | 0 | 0 | |08-04 16:30|08-04 17:30| 1 | 36 |100 | 0 | 2 | 0 | 0 | |08-04 17:30|08-04 18:30| 1 | 39 |100 | 0 | 1 | 0 | 0 | |08-04 18:30|08-04 19:30| 2 | 31 |100 | 0 | 2 | 0 | 0 | |08-04 19:30|08-04 20:30| 4 | 39 |100 | 0 | 2 | 0 | 0 | |08-04 20:30|08-04 21:30| 1 | 38 |100 | 0 | 2 | 0 | 0 | |08-04 21:30|08-04 22:30| 1 | 36 |100 | 0 | 2 | 0 | 0 | |08-04 22:30|08-04 23:30| 1 | 31 |100 | 0 | 2 | 0 | 0 | +-----------+-----------+----+----+----+---+---+---+---+
Other tools that are part of the LVE-stats 2 utility
Below command creates a chart representing LVE usage for user:
# /usr/sbin/lvechart [--OPTIONS]
Below command creates a chart representing MySQL usage for user:
# /usr/sbin/dbgovchart [--OPTIONS]
Below command displays information from system state (snapshots) for user:
# lve-read-snapshot [--OPTIONS]
Below command creates/recreates database for lve-stats:
# lve_create_db [-h] [--recreate] [--print-sql]
Below utility provides information about current MySQL and LVE usage of a running system in JSON format:
# /usr/sbin/cloudlinux-top [--OPTIONS]
Below utility provides historical information about resource usage:
# /usr/sbin/cloudlinux-statistics [--OPTIONS]
6) cagefsctl Command Usage
CageFS is a virtualized file system per user that connects each client individually, preventing users from viewing each other and their sensitive information.
In addition, CageFS prevents a number of attacks, including most privilege escalation and information disclosure attacks.
cagefsctl is used to manage CageFS. It allows you to initialize and update CageFS, as well as enable/disable CageFS for individual users:
Syntax: /usr/sbin/cagefsctl [-OPTIONS]
Initialize CageFS (create CageFS if it does not exist):
# /usr/sbin/cagefsctl --init
List users that added in CageFS as shown below:
# /usr/sbin/cagefsctl --list-enabled 190 enabled user(s) absolute adhavacashew aishwary . . mageshco . .
List disabled users as shown below:
# /usr/sbin/cagefsctl --list-disabled 2 disabled user(s) mageshco whmza
7) MySQL Governor Usage
MySQL Governor monitors the CPU and disk IO usage of each user in real time using the dbtop application and triggers MySQL queries based on LVE limits.
This will automatically detect and kill long-running queries.
This monitors MySQL usage. It requires db_governor to be running. It shows usage for the current, mid and long intervals.
# dbtop [-OPTIONS]
Similarly, dbctl is a command line tool to manage DB Governor configuration:
# dbctl command [parameter] [options]
Below command displays information about DB Governor historical usage:
# lveinfo --dbgov [options]
dbgovchart is analog of lvechart tool to create charts representing customer’s to MySQL usage as shown below:
# /usr/sbin/dbgovchart [OPTIONS]
8) cl-quota (Inode) Usage
cl-quota utility is designed to control disk quotas as shown below:
Syntax: /usr/bin/cl-quota [options]
Print inode limits for all users using the below command:
# /usr/bin/cl-quota | more id inodes_used inodes_soft inodes_hard -------------------------------------------------------------------------------- 0 - 0 0 1 57 0 0 2 3 0 0 25 221 0 0 27 9529 0 0 47 183 0 0 68 2 0 0 89 27 0 0 97 8 0 0 99 4 0 0 173 4 0 0 497 4 0 0 498 1 0 0
Print inode limits for a particular user using the below command:
# /usr/bin/cl-quota -u daygeekc id inodes_used inodes_soft inodes_hard -------------------------------------------------------------------------------- 621 15294 0 0
9) PHP Selector Usage
PHP Selector is a CloudLinux component that sits on top of CageFS. It allows each user to select required PHP version and it’s module based on their needs. PHP Selector requires account to have CageFS enabled to work.
Below command lists all available alternatives for an interpreter:
# selectorctl --list 5.2 5.2.17 /opt/alt/php52/usr/bin/php-cgi 5.3 5.3.28 /opt/alt/php53/usr/bin/php-cgi 5.4 5.4.23 /opt/alt/php54/usr/bin/php-cgi 5.5 5.5.7 /opt/alt/php55/usr/bin/php-cgi
Below command shows the current PHP version of the user:
# selectorctl --user-current --user=username
Use the following command to set specific version of the PHP to user:
# selectorctl --set-user-current=5.4 --user=username
List users that use particular version of PHP. For instance, to see all users that use PHP version 5.3, run below command:
# selectorctl --list-users --version=5.3
Switch the PHP version for the user from one version to another using the below command:
# selectorctl --user=user1 --change-to-version=5.2 --version=5.3
Over to You
In this guide, we have explained how to Manage/Administrate CloudLinux OS from command-line.
If you have any questions or feedback, feel free to comment below. Happy learning!