内存不够 swap 来凑
今天安装 php8.3.2 遇到一个非常难受的问题.
$ make test
....
cc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See http://bugzilla.redhat.com/bugzilla for instructions.
make: *** [ext/opcache/jit/zend_jit.lo] Error 1
解释很简单, 我的1核1G 服务器资源不足....
所以就如标题所说, 内存不够 Swap来凑, 操作如下:
若系统内存不足,可以通过增加交换空间(swap space)来提供额外的虚拟内存。下面是在Linux系统上增加交换空间的一般步骤:
检查当前的交换空间:运行以下命令查看当前的交换空间配置:
sudo swapon --show
创建一个用于交换的文件:使用以下命令创建一个用于交换的文件,文件大小根据你的需求而定(例如,创建一个1GB大小的交换文件):
sudo fallocate -l 1G /swapfile
设置文件的权限:运行以下命令设置交换文件的权限,只有root用户可读写:
sudo chmod 600 /swapfile
将文件格式化为交换空间:运行以下命令将文件格式化为交换空间:
sudo mkswap /swapfile
启用交换空间:运行以下命令启用交换空间:
sudo swapon /swapfile
更新/etc/fstab文件:打开/etc/fstab文件,并在文件末尾添加以下行,以便系统在启动时自动挂载交换空间:
/swapfile none swap sw 0 0
调整交换空间的调度策略(可选):默认情况下,Linux采用交换空间的默认调度策略,但你可以根据需要进行调整。打开/etc/sysctl.conf文件,并添加以下行来调整交换空间的调度策略:
vm.swappiness=10
生效配置更改:运行以下命令使配置更改生效:
sudo sysctl -p
现在,你已经成功增加了交换空间。你可以再次运行 sudo swapon --show 命令来确认交换空间已经启用。
请注意,增加交换空间可以提供额外的虚拟内存,但它并不是解决长期性能问题的最佳解决方案。如果你的应用程序需要更多内存,考虑升级系统的物理内存或优化应用程序的资源使用情况。
Html + JS 写一个扫雷小游戏

<!DOCTYPE html>
<html>
<head>
<title>扫雷游戏</title>
<style>
.cell {
width: 20px;
height: 20px;
border: 1px solid #ccc;
display: inline-block;
text-align: center;
vertical-align: middle;
background-color: #eee;
font-weight: bold;
cursor: pointer;
}
</style>
</head>
<body>
<h1>扫雷游戏</h1>
<div id="board"></div>
<script>
// 游戏参数
var rows = 10; // 行数
var cols = 10; // 列数
var mineCount = 10; // 地雷数量
// 游戏状态
var board = []; // 游戏面板的数据结构
var gameOver = false; // 游戏结束标志
// 创建游戏面板
function createBoard() {
var boardElement = document.getElementById('board');
for (var i = 0; i < rows; i++) {
var row = [];
for (var j = 0; j < cols; j++) {
var cell = document.createElement('div'); // 创建方块元素
cell.className = 'cell'; // 添加 CSS 类名
cell.setAttribute('data-row', i); // 设置自定义属性 data-row,表示行号
cell.setAttribute('data-col', j); // 设置自定义属性 data-col,表示列号
cell.addEventListener('click', cellClick); // 添加点击事件监听器
boardElement.appendChild(cell); // 将方块元素添加到游戏面板
row.push({
element: cell,
hasMine: false, // 是否包含地雷
revealed: false // 是否已经揭示
});
}
board.push(row);
boardElement.appendChild(document.createElement('br')); // 每行结束添加换行符
}
}
// 初始化地雷
function initMines() {
var count = 0;
while (count < mineCount) {
var row = Math.floor(Math.random() * rows); // 随机生成行号
var col = Math.floor(Math.random() * cols); // 随机生成列号
if (!board[row][col].hasMine) {
board[row][col].hasMine = true; // 标记该方块包含地雷
count++;
}
}
}
// 点击方块
function cellClick(event) {
if (gameOver) {
return;
}
var cell = event.target; // 获取被点击的方块元素
var row = parseInt(cell.getAttribute('data-row')); // 获取方块的行号
var col = parseInt(cell.getAttribute('data-col')); // 获取方块的列号
if (board[row][col].hasMine) {
gameOver = true; // 游戏结束
cell.style.backgroundColor = 'red'; // 设置被点击的地雷方块的背景颜色为红色
alert('Game Over');
} else {
revealCell(row, col); // 揭示方块
}
}
// 揭示方块
function revealCell(row, col) {
var cell = board[row][col].element; // 获取方块元素
if (board[row][col].revealed) {
return; // 如果方块已经揭示,则不执行任何操作
}
board[row][col].revealed = true; // 标记方块已经揭示
cell.style.backgroundColor = '#ddd'; // 设置方块的背景颜色
var mineCount = countAdjacentMines(row, col); // 计算方块周围的地雷数量
if (mineCount > 0) {
cell.innerText = mineCount; // 如果周围有地雷,则在方块中显示地雷数量
} else {
revealAdjacentCells(row, col); // 如果周围没有地雷,则揭示相邻的方块
}
}
// 计算相邻方块的地雷数量
function countAdjacentMines(row, col) {
var count = 0;
for (var i = Math.max(0, row - 1); i <= Math.min(rows -1, row + 1); i++) {
for (var j = Math.max(0, col - 1); j <= Math.min(cols - 1, col + 1); j++) {
if (board[i][j].hasMine) {
count++; // 如果相邻方块包含地雷,则数量加一
}
}
}
return count; // 返回相邻方块的地雷数量
}
// 揭示相邻的方块
function revealAdjacentCells(row, col) {
for (var i = Math.max(0, row - 1); i <= Math.min(rows - 1, row + 1); i++) {
for (var j = Math.max(0, col - 1); j <= Math.min(cols - 1, col + 1); j++) {
if (!board[i][j].hasMine && !board[i][j].revealed) {
revealCell(i, j); // 如果相邻方块不包含地雷且未揭示,则揭示方块
}
}
}
}
// 初始化游戏
function initGame() {
createBoard(); // 创建游戏面板
initMines(); // 初始化地雷
}
// 开始游戏
initGame();
</script>
</body>
</html>