Blog
- Details
HDMI and Display Port versions:
In general, lower refresh rates the same, higher + variable fresh rates:
dp 1.4 > hdmi 2.0
hdmi 2.1 > dp 1.4
dp 2.1 > hdmi 2.1
Capabilities depends on graphics card, monitor, cable
Good read, overview of current hdmi + display port versions
source https://www.tomshardware.com/features/displayport-vs-hdmi-better-for-gaming
nvidia RTX 3000/4000 and amd RX 6000/7000: hdmi 2.1
nvidia RTX 3000/4000 and amd RX 6000: dp 1.4
amd RX 7000: dp 2.1
usbc 4, thunderbolt: dp 1.2 to 2.1
source https://www.cablematters.com/Blog/HDMI/displayport-vs-hdmi
HDMI HDMI HDMI DP DP DP DP
1.4 2.0 2.1 1.2 1.3 1.4 2.0
1080p @ 120Hz ✅ ✅ ✅ ✅ ✅ ✅ ✅
1440p @ 30Hz ✅ ✅ ✅ ✅ ✅ ✅ ✅
1440p @ 60Hz ✅ ✅ ✅ ✅ ✅ ✅ ✅
1440p @ 120Hz ❌ ✅ ✅ ✅ ✅ ✅ ✅
4k @ 30Hz ✅ ✅ ✅ ✅ ✅ ✅ ✅
4k @ 60Hz ❌ ✅ ✅ ✅ ✅ ✅ ✅
4k @ 120Hz ❌ ❌ ✅ ❌ ✅ ✅ ✅
8k @ 30Hz ❌ ❌ ✅ ❌ ✅ ✅ ✅
8k @ 60Hz ❌ ❌ ✅ ❌ ❌ ✅ ✅
8k @ 120Hz ❌ ❌ ✅ ❌ ❌ ❌ ✅
HDR ❌ ✅ ✅ ❌ ❌ ✅ ✅
source https://www.cablematters.com/Blog/HDMI/displayport-vs-hdmi
-End of Document-
Thanks for reading
- Details
Some useful Linux commands
-
cat
cat [file]
- cat = dump file contents to terminal; ls -l to ensure small file
-
df
df -h
- df = show disks space per partition
- / = separate volume/disk for root os, logs
- /data = separate volume/disk for websites, apps
- -h = human readable size
- df = show disks space per partition
-
grep
grep [search] [files]
- grep = filter results, look for patterns in files
- Example: grep Error *.log
-
htop
htop
- htop = top list of processes, nicely colored; can sort, filter
-
kill
kill [pid]
- kill = force stop/kill a process; only use for 'hung' process
- [pid] = pid from
ps aux
list
-
ls
ls -lhtr [dir]
- ls = list contents of directory
- -l = details
- -h = human readable sizes
- -t = sort by time
- -r = reverse sort, so new shows at bottom
- -1 = just list names in a single column
- Example: ls -lhtr logs/*
-
ps
ps aux
- ps = process list
- a = all, including other users
- u = user format
- x = register format
- Example: ps aux | grep nginx
-
reboot
sudo reboot
- reboot = reboot server; should not be needed; restart individual services
-
systemctl
sudo systemctl [action] [process]
- systemctl = manage services such as nginx, php-fpm
- Example: sudo systemctl status nginx
- Example: sudo systemctl restart nginx
- Example: sudo systemctl status php-fpm
- Example: sudo systemctl restart php-fpm
-
tail
tail -f -n50 [file]
- tail = returns the last few lines of a file
- -n# = number of lines
- -f = follow, useful for tailing an active log file
- Example: tail -f logs/app.log
-
vim
vim [file]
- vim, vi = text editor; ls -l to ensure small file
- arrow keys = move cursor
- shift G = go to end of file
- ctrl u = page up
- ctrl d = page down
- /[patttern] = search for pattern
- esc = get out of most vi modes
- :q = quit
- :q! = quit without writing
- :wq = write, quite
- note, if quit a SSH session with a file vi-ed/open, be sure to SSH in again and cleanup the vi auto backup [file]~; vi-ing the original file again will prompt you about
- Example: sudo vim /var/log/messages
-End of Document-
Thanks for reading
- Details
Some general tips for researching a slow or unresponsive app or system
Starting checklist
- SSH to EC2/server
- Check disk space
-
df -h
-
- Check processes
-
htop
-
ps aux
-
- Check app logs
-
cd app/
-
ls -lhtr logs/
-
vim [log]
-
- Check system logs
-
ls -lhtr /var/log/
-
tail -f -n50 /var/log/messages
-
- Check disk space
- SQL Processes
- DB Gui: Tools -> Server Monitor -> SQL
- Check AWS console
- EC2 list
- Monitoring
- RDS list
- Monitoring
- Performance Insights
- Cloud Watch
- Alarms
- Monitoring
- EC2 list
- App specific
- grep (Find in Files, Search)
- grep cron for script name
- grep code for database table names, fields
- grep [everything]
- Check logs
- Often located relative to script, in logs/ or log/
- Can be also be in /var/log/[app dir]/
- grep (Find in Files, Search)
Logs
App logs
Locations will vary
Some apps may be relative to their PHP (or other language) files, often log/ or logs/
Some cron or processing logs may be in /var/log/[process dir]/
Note, log locations should be consistent to facilitate finding them.
Web Server logs
On some errors, such as fatal or configuration errors, PHP (or other language) info is outputted to the web server logs, such as Nginx
nginx is the process name
PHP runs as a separate process, php_fpm
ls -lhtr /var/log/nginx
tail -n50 /var/log/nginx/[site]_error.log
tail -f /var/log/nginx/[site]_error.log
ls -lhtr /var/log/php-fpm/
ls -lhtr /var/log/
You may need to login as sudo user ec2-user to view system logs
Common log for OS messages
sudo vim /var/log/messages
Common log for login, security messages
sudo vim /var/log/secure
Web Server Config
Nginx is a common web server
You can grep for dns or web directories to know
- server_name = what dns is being used
- root = which directory a site is being hosted from
- error_log = where the log files are
grep [site] /etc/nginx/sites.d/*
vim /etc/nginx/sites.d/[site].conf
server_name [site].com;
set $env "dev";
set $app_dir "[repo name]";
root /data/sites/$env/$app_dir/public/;
access_log /var/log/nginx/[site].com_access_log;
error_log /var/log/nginx/[site].com_error_log error;
Cron
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# EXAMPLE CRON
*/10 * * * * [app user] /usr/bin/php -q /[process dir]/[script] [args if any] &>> \
/var/log/[process dir]/[script].log
- ensure specify the app user
- &>> [log] is shorthand for >> [log] 2&>>1
- > = overwrite
- >> = append
- 2&>1 = redirect errors to standard out eg capture errors in log
- compare to other crons to keep a consistent pattern
System crons
ls -lhtr /etc/cron.d/
Preferred
Crons in /etc/cron.d/ allow for custom runtimes. A cron file per concept/process/logical grouping should be created, and can contain multiple scripts/commands.
Note, there are other potential system crons such as /etc/cron.daily which will run crons .. daily, but without the flexibility of specify when during the day they run; cron.daily often runs at 2am or 3am depending on the OS. Only use /etc/cron.d/
User crons
crontab -l
view cron of current user
crontab -e
edit cron of current user
Not recommended
Crons can also be attached to a user. User crons are not easily accessible and are stored in one file per user, making a large number of crons harder to manage, and overly easy to delete (crontab -r = poof gone).
To manually backup a users cron
cd ~
crontab -l > cron_[Ymd].txt
-End of Document-
- Details
DDEV
"DDEV is an open source tool for launching local [PHP, Python, NodeJS, etc] development environments in minutes. These environments can be extended, version controlled, and shared, so you can take advantage of a Docker workflow without Docker experience or bespoke configuration. Projects can be changed, powered down, or removed just as easily as they’re started."
GitHub | Docs
Terminology:
- host os (windows/macosx/linux)
- docker os (linux vm)
- containers (linux)
General flow of ddev tech stack
[ddev, on host os] -> [docker compose -> docker, in linux vm] -> [containers, linux, managed by docker]
Install DDEV and related tools
Follow the install steps for your OS
https://ddev.readthedocs.io/en/stable/
Before running any external shell or powershell scripts, read the install script for your OS.
Prerequisites:
Windows
- Recommended: use wsl2 and docker desktop, docker ce inside wsl (do your work mostly in windows)
- Alternative: use wsl2, docker ce inside wsl (do your work mostly in wsl/linux)
- Alternative: use virtual box, docker ce inside virtual box (do your work mostly in virtual box/linux)
Windows ides can access files in wsl2, but ide operations will be slower due to the different filesystems. Within wsl, for performance, do not reference files by /mnt/c/home/dev, instead use the linux file system, eg /home/dev or ~/
Install, update wsl
https://learn.microsoft.com/en-us/windows/wsl/install
https://learn.microsoft.com/en-us/windows/wsl/basic-commands
The ddev install uses chocolatey, a package manager for windows https://community.chocolatey.org/
Tip: Before installing ddev, you may want to change the default chocolatey tools install directory.
By default chocolatey installs itself to C:\ProgramData\chocolatey and installs tools to C:\tools\ (not great)
In an admin powershell, run:
[System.Environment]::SetEnvironmentVariable('ChocolateyToolsLocation','C:\ProgramData\ChocolateyTools', 'User')
Installing docker desktop may require a logout/reboot.
Ensure docker desktop is using wsl2, launch docker desktop
configure gear icon -> general -> use wsl2 based engine; resources -> wsl integration
You shouldn't need to directly access docker desktop when using ddev.
MacOSX
- Recommended: use colima, docker ce inside colima linux os (do your work mostly in macosx)
- Alternative: use docker desktop, docker ce inside docker desktop linux os (do your work mostly in macosx)
- Alternative: use virtual box, docker ce inside virtual box (do your work mostly in virtual box/linux)
You shouldn't need to directly use colima when using ddev.
Linux
- Recommended: docker ce
- Alternative: use docker desktop
DDEV Configuration
local config
a local config file can be used to merge with the main ddev config in .ddev/config.yaml
examples:
.ddev/config.local.yaml
hooks:
post-start: